舉例說明:
volatile int i=10;
int j = i;
...int k = i;
volatile 告訴編譯器i是隨時可能發生變化的,每次使用它的時候必須從i的位址中讀取,因而編譯器生成的可執行碼會重新從i的位址讀取資料放在k中。
volatile 影響編譯器編譯的結果,指出,volatile 變數是隨時可能發生變化的,與volatile變數有關的運算,不要進行編譯優化,以免出錯,(vc++ 在產生release版可執行碼時會進行編譯優化,加volatile關鍵字的變數有關的運算,將不進行編譯優化。)。
其中編譯器編譯優化是:
由於編譯器發現兩次從i讀資料的**之間的**沒有對i進行過操作,它會自動把上次讀的資料放在k中。而不是重新從i裡面讀。這樣以來,如果i是乙個暫存器變數或者表示乙個埠資料就容易出錯,所以說volatile可以保證對特殊位址的穩定訪問,不會出錯。
C語言volatile關鍵字
volatile 是易變的 不穩定的意思。很多人根本就沒見過這個關鍵字,不知道它的存在。也有很多程式設計師知道它的存在,但從來沒用過它。我對它有種 楊家有女初長成,養在深閨人未識 的感覺。volatile 關鍵字和const 一樣是一種型別修飾符,用它修飾的變數表示可以被某些編譯器未知的因素更改,比...
C語言關鍵字volatile
volatile修飾變數表示該變數易受外界影響發生改變,volatile強烈要求編譯器每次對變數進行訪問都要從記憶體中進行 int a 10 b a c b 當編譯器掃到第一行時10賦給了a 自後a變數的值沒有發生改變,a賦給了b,b賦給了c 由於cpu訪問記憶體的速度較慢,編譯器為了提高效率,直接...
C語言關鍵字 volatile
volatile關鍵字 用法 1 告訴編譯器不做任何優化 2 表示用volatile定義的變數會在程式外被改變,每次都必須要從記憶體中讀取,而不能把它放在cache或暫存器中重複使用 volatile是告訴編譯器對它所修飾的物件別執行優化。volatile在進行多執行緒程式設計時要注意,而在單執行緒...