2014-08-27 18 views
-4

我想知道如果一個變量被聲明爲volatile常量,它可以使用I/O或任何外設進行更改嗎?例如: : volatile const int input = 0; 這樣的變量還可以存儲在內存中的哪個位置?常量是如何表示的?

+2

你的問題還不清楚。 – 2014-08-27 09:38:15

+0

@pranitkothari不,它只是太寬泛。 – 2014-08-27 09:42:55

回答

1

它完全取決於編譯器,受到相關標準引入的任何約束。假設你可以獲取一個常量的地址並將其分配給一個指針,那麼可以推測該常量佔用了內存。

但是這並不真正暗示常量是如何存儲在內存中的。如果這樣做沒有副作用,編譯器可以完全優化它們。或者,const char* foobar = "foobar"const char* bar = "bar"甚至可能不佔用不相交的位置:嘗試修改(正式地未定義的行爲)將是災難性的。使用volatile的確抑制了一些優化,但確切的行爲仍然依賴於編譯器。

5

當變量定義爲const時,系統將其作爲只讀變量。不應修改其值的變量。但是,通過將變量定義爲volatile,程序員要求編譯器避免編譯器優化。

讓我們的例子: volatile const int flag = 0;

它說flag是一個變量,其值不應該被修改,並要求編譯,以避免編譯器的優化,這意味着,這表明標誌的值是可以改變的,編譯器在其他系統進程的操作過程中。

一個很好的例子是處理器中的PSW或CPSR(程序狀態字)寄存器。它對用戶是隻讀的(例如const),只有在系統完成算術或邏輯操作時才能由系統修改(例如volatile)。

我希望它有幫助。

+0

+1這是的。 「建議編譯器在其他系統進程運行期間可以更改標誌的值」特別好。 – Bathsheba 2014-08-27 09:45:23

+0

@AhmedNour請編輯您的問題,並更具體,並添加細節來縮小答案集,以便提供最佳答案。問這樣一個廣泛的問題並不是一個好習慣,你會得到多個可能偏離實際需求的好答案和答案。 **只是一個建議,因爲你是新來的SO。** – iqstatic 2014-08-28 06:21:46