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