乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值(from memory),而不是使用儲存在暫存器裡的備份。
下面是volatile變數的幾個例子:
1) 並行裝置的硬體暫存器(如:狀態暫存器)
2) 乙個中斷服務子程式中會訪問到的非自動變數(non-automatic variables)
3) 多執行緒應用中被幾個任務共享的變數
這個多用在嵌入式開發中,一般場合不需要使用。
先看看下面的例子:
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 可以保證對特殊位址的穩定訪問。
C語言修飾詞之violate
乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值 from memory 而不是使用儲存在暫存器裡的備份。下面是volatile變數的幾個例子 1 並行裝置的硬體暫存器 ...
C語言修飾詞之const
const是乙個c語言的關鍵字,它限定乙個變數不允許被改變。使用const在一定程度上可以提高程式的安全性和可靠性,另外,在 別人 的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。另外const在其他程式語言中也有出現,如c php5 c net hc08 c。c中const的使...
ios修飾詞總結
ios總共有這些修飾詞 assign weak strong retain copy nonatomic atomic readonly readwrite assign arc mrc weak arc 物件 弱指標是針對物件的修飾詞 就是說它不能修飾基本資料型別 int float weak 修...