最易變的關鍵字 volatile

2021-09-01 03:51:39 字數 880 閱讀 8159

from: 

volatile 是易變的、不穩定的意思。很多人根本就沒見過這個關鍵字,不知道它的存在。也有很多程式設計師知道它的存在,但從來沒用過它。我對它有種「楊家有女初長成,養在深閨 人未識」 的感覺。

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 可以保證對特殊位址的穩定訪問。

但是注意:在 vc++6.0 中,一般 debug 模式沒有進行**優化,所以這個關鍵字的作 用有可能看不出來。你可以同時生成 debug 版和 release 版的程式做個測試。

最易變的關鍵字 volatile

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

易變的關鍵字 volatile

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

關鍵字 volatile關鍵字的作用

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