2013-07-27 142 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