c語言中volatile關鍵字是什麼含義
volatile 影響編譯器編譯的結果,指出,volatile 變量是隨時可能發生變化的,與volatile變量有關的運算,不要進行編譯優化,以免出錯,(VC++ 在產生release版可執行碼時會進行編譯優化,加volatile關鍵字的變量有關的運算,將不進行編譯優化。)。
例如:
volatile int i=10;
int j = i;
...
int k = i;
volatile 告訴編譯器i是隨時可能發生變化的,每次使用它的時候必須從i的地址中讀取,因而編譯器生成的可執行碼會重新從i的地址讀取數據放在k中。
而優化做法是,由於編譯器發現兩次從i讀數據的代碼之間的代碼沒有對i進行過操作,它會自動把上次讀的數據放在k中。而不是重新從i裏面讀。這樣以來,如果i是一個寄存器變量或者表示一個端口數據就容易出錯,所以說volatile可以保證對特殊地址的穩定訪問,不會出錯。
例如:
volatile int i=10;
int j = i;
...
int k = i;
volatile 告訴編譯器i是隨時可能發生變化的,每次使用它的時候必須從i的地址中讀取,因而編譯器生成的可執行碼會重新從i的地址讀取數據放在k中。
而優化做法是,由於編譯器發現兩次從i讀數據的代碼之間的代碼沒有對i進行過操作,它會自動把上次讀的數據放在k中。而不是重新從i裏面讀。這樣以來,如果i是一個寄存器變量或者表示一個端口數據就容易出錯,所以說volatile可以保證對特殊地址的穩定訪問,不會出錯。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
編程語言巔峯之戰,誰纔是真正的王者?| InfoQ編程語言排行榜
田晓旭
2021-07-20 11:43:51
InfoQ 編程語言 2 月排行榜,更好的投票活動來了
InfoQ 中文站
2021-03-22 18:34:58
Android C++系列:JNI調用時的異常處理
轻口味
2021-11-19 10:03:53
國內最大的C++軟件項目之一,WPS的“自守”之道
罗燕珊
2021-10-28 14:23:59
談 C++17 裏的 Memento 模式
hedzr
2021-10-18 14:13:51
談 C++17 裏的 State 模式之二
hedzr
2021-10-12 21:03:51
英特爾最新版C/C++編譯器採用LLVM架構,性能提升明顯
James R Reinders
2021-09-17 10:48:52
C++實用指南
Bartlomiej Filipek
2021-07-22 10:03:58
SpaceX龍飛船性能要求嚴苛,軟件開發存挑戰
凌敏
2021-05-14 13:43:55
縱觀20年間國外碼農的薪酬變化:漲幅下降,初級編碼崗大幅消失
NICOLE KOW
2021-03-22 18:35:29
如果編程語言是《權力的遊戲》中的角色?(上)
Sajid Lhessani
2021-03-22 18:35:23
InfoQ 編程語言1月排行榜:邀你投票
InfoQ 中文站
2021-01-21 17:28:56
2021年最值得學習的10種編程語言
Statistics and Data
2021-01-19 14:13:58
我是如何愛上 Julia 編程語言的?
Emmett Boudreau
2020-12-29 14:24:00