關鍵字 volatile關鍵字的作用

2021-10-15 00:15:06 字數 576 閱讀 5572

1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性;使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。

2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值到暫存器中;由於訪問暫存器的效率要高於ram,所以在需要讀取變數時,直接暫存器中獲取變數的值,而不是從ram中。

3.在多工環境中,雖然在兩次讀取變數之間不改變變數的值,在一些情況下變數的值還是會發生改變,比如在發生中斷程式或者有其他的執行緒。這時候如果編譯器優化,依舊從暫存器中獲取變數的值,修改的值就得不到及時的響應(在ram還未將新的值賦值給暫存器,就已經獲取到暫存器的值)。

4.要想防止編譯器優化,就需要在宣告變數時加volatile關鍵字,加關鍵字後,就在ram中讀取變數的值,而不是直接在暫存器中取值。

關鍵字volatile詳解

與關鍵字const一樣,關鍵字volatile也是乙個型別修飾符 type specifier 關於volatile的作用 例如程式清單 volatile int m 10 int k,n m k i volatile將告訴編譯器,整形變數m是隨時發生變化的,每次使用m的時候,都要求從m的位址中找出...

volatile關鍵字 詳解

volatile 關鍵字 volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如 作業系統 硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的 就不再進行優化,從而可以提供對特殊位址的穩定訪問。使用該關鍵字的例子如下 int volati...

volatile 關鍵字說明

volatile的本意是 易變的 由於訪問暫存器的速度要快過ram,所以編譯器一般都會作減少訪問外部ram的優化。對於乙個變數,如果編譯器發現賦值後,沒有變化,編譯器就可能優化 直接從暫存器或取資料,而不是從記憶體獲取。如果由於某種原因,變數被作業系統等編譯器未知的原因更改,程式可能沒有獲得最新的值...