2013-07-27 55 views
5

我可以知道volatile变量存储在内存中的位置吗?挥发性变量存储在哪里?

  1. 如果我声明全局意味着它在哪里存储在内存中?

    volatile int a =10; 
    int main() 
    { 
        printf("Global A value=%d",a); 
        return 0; 
    } 
    
  2. 如果我在本地声明函数意味着它在哪里存储在内存中?

    int main() 
    { 
        volatile int a =10; 
        printf("Local A value=%d",a); 
        return 0; 
    } 
    

是否得到存储在堆栈/ RAM /数据段?

请澄清我的疑惑。

+0

你在找什么样的答案? “你在哪里存储在内存中是什么意思?”你想找到它的地址吗?您是否想要了解这些变量来自何种池塘,符合这些池的标准定义? –

+1

@NicolBolas:我想这个问题的一部分是'用volatile判断一个变量是否改变了编译器放置变量的内存位置',答案是'不'。 –

+0

我看不出这是另一个的重复。另一个是关于“什么是volatile”,这个是“关于内存地址的结果”。 – glglgl

回答

13

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

+0

有时它也有助于防止编译器优化的某些缺点 - 如整个程序中var的省略。基本上,即使编译器没有在整个程序中使用,编译器也会保留'var',所以它不会删除它。 – user2485710

11

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

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

+0

大家好,谢谢你的回复。 – SenthilKumar

+0

大家好,在我的第一个例子中,我明白,全局初始化变量(没有易失性)存储在“初始化数据段”和我的第二个例子,因为它是本地变量(没有易失性)它被存储在stack.so当我添加volatile关键字意味着变量的位置是否被更改? – SenthilKumar