最易變的關鍵字 volatile

2021-05-28 05:11:28 字數 724 閱讀 8423

volatile 關鍵字和const 一樣是一種型別修飾符,用它修飾的變數表示可以被某些編譯器

未知的因素更改,比如作業系統、硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編

譯器對訪問該變數的**就不再進行優化,從而可以提供對特殊位址的穩定訪問。

先看看下面的例子:

int i=10;

int j = i;//(1)語句

int k = i;//(2)語句

這時候編譯器對**進行優化,因為在(1)、(2)兩條語句中,i 沒有被用作左值。這時候

編譯器認為i 的值沒有發生改變,所以在(1)語句時從記憶體中取出i 的值賦給j 之後,這個

值並沒有被丟掉,而是在(2)語句時繼續用這個值給k 賦值。編譯器不會生成出彙編**

重新從記憶體裡取i 的值,這樣提高了效率。但要注意:(1)、(2)語句之間i 沒有被用作左

值才行。

再看另乙個例子:

volatile int i=10;

int j = i;//(3)語句

int k = i;//(4)語句

volatile 關鍵字告訴編譯器i 是隨時可能發生變化的,每次使用它的時候必須從記憶體中取出i

的值,因而編譯器生成的彙編**會重新從i 的位址處讀取資料放在k 中。

這樣看來,如果i 是乙個暫存器變數或者表示乙個埠資料或者是多個執行緒的共享數

據,就容易出錯,所以說volatile 可以保證對特殊位址的穩定訪問。

最易變的關鍵字 volatile

from volatile 是易變的 不穩定的意思。很多人根本就沒見過這個關鍵字,不知道它的存在。也有很多程式設計師知道它的存在,但從來沒用過它。我對它有種 楊家有女初長成,養在深閨 人未識 的感覺。volatile 關鍵字和 const 一樣是一種型別修飾符,用它修飾的變數表示可以被某些編譯器未知...

易變的關鍵字 volatile

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

關鍵字 volatile關鍵字的作用

1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...