C++ 易失性变量存储在哪里?

C++ 易失性变量存储在哪里?,c++,c,C++,C,我可以知道volatile变量存储在内存中的什么位置吗 如果我全局声明意味着它存储在内存中的什么位置 volatile int a =10; int main() { printf("Global A value=%d",a); return 0; } int main() { volatile int a =10; printf("Local A value=%d",a); return 0; } 如果我在函数内部局部声明,意味着它存储在内存中的什

我可以知道
volatile
变量存储在内存中的什么位置吗

  • 如果我全局声明意味着它存储在内存中的什么位置

    volatile int a =10;
    int main()
    {
        printf("Global A value=%d",a);
        return 0;
    }
    
    int main()
    {
        volatile int a =10;
        printf("Local A value=%d",a);
        return 0;
    }
    
  • 如果我在函数内部局部声明,意味着它存储在内存中的什么位置

    volatile int a =10;
    int main()
    {
        printf("Global A value=%d",a);
        return 0;
    }
    
    int main()
    {
        volatile int a =10;
        printf("Local A value=%d",a);
        return 0;
    }
    
  • 它是否存储在堆栈/RAM/数据段中


    请澄清我的疑问。

    volatile
    只是告诉编译器它不能将变量的值缓存在寄存器中,它不会更改变量的分配位置。

    向变量声明添加
    volatile
    限定符不会更改其存储类


    在第一个示例中,变量具有静态存储,在第二个示例中,变量具有自动存储;即使您删除了
    volatile
    限定符,情况也是如此。

    有时它也有助于防止编译器优化过程中的一些缺点,例如从整个程序中省略
    var
    。基本上,编译器会考虑
    var
    ,即使它没有在整个程序中使用,所以不会删除它。你在寻找什么样的答案?你说的“它存储在内存中的什么地方?”是什么意思?你想知道它的地址吗?您是否试图了解这些变量来自于符合标准对这些池的定义的内存池?@Nicolas:我猜问题的一部分是“使用
    volatile
    限定变量是否会改变编译器放置变量的内存位置”,答案是“不”。我看不出这是另一个的复制品。另一个是关于“什么是
    volatile
    ”,这一个是“它有关于内存地址的哪个结果”。@JonathanLeffler:在我的第一个例子中,我知道全局初始化变量(没有volatile)存储在“初始化数据段”和我的第二个例子中,因为它是局部变量(没有volatile)它存储在堆栈中。因此,当我添加volatile关键字时,意味着变量存储位置是否发生更改?…请澄清我的疑问Hi All,谢谢你的回答。Hi All,在我的第一个示例中,我理解全局初始化变量(不带volatile)存储在“初始化数据段”和我的第二个示例中,因为它是局部变量(没有volatile)它被存储在堆栈中。所以,当我添加volatile关键字时,意味着变量的位置会改变吗?