volatile關鍵字的含義和作用
阿新 • • 發佈:2019-01-07
1、volatile提醒編譯器它後面所定義的變數隨時有可能改變,因此編譯後的程式每次需要儲存或讀取這個變數的時候,都要小心地。從該變數的地址中讀取。如果沒有volatile關鍵字,則編譯器就可能優化讀取和儲存,可能暫時使用暫存器中的值。
當要求使用volatile宣告變數的時候,系統總是重新從它所在的記憶體讀取資料,即使前面的指令剛剛從該處讀取過資料。精確地說就是,遇到這個關鍵字宣告的變數,編譯器對訪問該變數的程式碼就不再優化,從而可以提供對特殊地址的穩定訪問;如果不使用volatile,則編譯器對所宣告的語句進行優化。
(簡潔地說就是,volatile關鍵字影響編譯器編譯的結果,用volatile宣告的變量表示該變數隨時可能發生變化,與該變數有關的運算,不要進行編譯優化,以免出錯。)
2、使用volatile的幾種情形
<1>中斷服務程式中修改的供其他程式檢測的變數需要加volatile;
<2>多工環境下各任務間共享的標誌應該加volatile;
<3>多儲存器對映的硬體暫存器通常也要加volatile,因為每次對它的讀寫都可能有不同意義。
注意:頻繁地使用volatile很可能會增加程式碼尺寸和降低程式碼效能,因此要合理地使用volatile。