我想知道如果一個變量被聲明爲volatile常量,它可以使用I/O或任何外設進行更改嗎?例如: : volatile const int input = 0; 這樣的變量還可以存儲在內存中的哪個位置?常量是如何表示的?
-4
A
回答
1
它完全取決於編譯器,受到相關標準引入的任何約束。假設你可以獲取一個常量的地址並將其分配給一個指針,那麼可以推測該常量佔用了內存。
但是這並不真正暗示常量是如何存儲在內存中的。如果這樣做沒有副作用,編譯器可以完全優化它們。或者,const char* foobar = "foobar"
和const char* bar = "bar"
甚至可能不佔用不相交的位置:嘗試修改(正式地未定義的行爲)將是災難性的。使用volatile
的確抑制了一些優化,但確切的行爲仍然依賴於編譯器。
5
當變量定義爲const
時,系統將其作爲只讀變量。不應修改其值的變量。但是,通過將變量定義爲volatile
,程序員要求編譯器避免編譯器優化。
讓我們的例子: volatile const int flag = 0;
它說flag
是一個變量,其值不應該被修改,並要求編譯,以避免編譯器的優化,這意味着,這表明標誌的值是可以改變的,編譯器在其他系統進程的操作過程中。
一個很好的例子是處理器中的PSW或CPSR(程序狀態字)寄存器。它對用戶是隻讀的(例如const
),只有在系統完成算術或邏輯操作時才能由系統修改(例如volatile
)。
我希望它有幫助。
相關問題
- 1. 如何顯示常量圖表值?
- 2. NSString表示的常量值
- 3. 常量表示/設計
- 4. 表達式不是常量
- 5. 如何在XAML中表示系統常量(如double.MaxValue)
- 6. Windows VK_常量是如何聲明的?
- 7. Big Theta表示法中常量的值
- 8. C中的浮點常量,位表示
- 9. C#二進制常量表示
- 10. 如何檢查參數值是否在常量列表中
- 11. 如何檢查表達式在C中是否爲常量?
- 12. 列表:如何添加常量類
- 13. B樹節點通常如何表示?
- 14. 如何確定視圖的列是派生的還是常量?
- 15. MySQL常量表
- 16. C++:「希望是常量表達式」
- 17. c#:什麼是常量表達式?
- 18. 什麼是常量和文字常量?
- 19. 常量對象常量是什麼?
- 20. 什麼是常量引用? (不是對常量的引用)
- 21. 類型的「:」如果第一操作數是常量表達式
- 22. 如何最好地表示數據庫中的常量(枚舉)(INT vs VARCHAR)?
- 23. 如何讓程序的常量變量
- 24. 如何在SMT-LIB標準中表示浮點常量(例如1e307)?
- 25. 你如何表示變量是在php中「unsanitized」?
- 26. 變量還是常量?
- 27. 堆內存是如何表示的?
- 28. 如何表示計量單位?
- 29. 如何將矢量表示爲矩陣?
- 30. 如何表示代數變量?
你的問題還不清楚。 – 2014-08-27 09:38:15
@pranitkothari不,它只是太寬泛。 – 2014-08-27 09:42:55