為了提供對特殊地址的穩定訪問。
[C]
純文本查看 復制代碼
1
2
3
|
int
i=10;
int
j=i;
//1
int
k=i;
//2
|
此時編譯器對上面代碼進行優化,因為在1、2語句中,i 沒有被用作左值(沒有被賦值)。這時候編譯器認為i 的值沒有發生改變,所以在1語句時從內存取出 i 的值賦給 j 之后,這個值沒有被丟掉,而是在2語句中繼續用這個值賦值給k。編譯器不會生成匯編代碼重新從內存里取 i ,這樣提高了效率
[C]
純文本查看 復制代碼
1
2
3
|
volatile
int
i=10;
int
j=i;
int
k=i;
|
volatile 關鍵字告訴編譯器,i 是隨時可能發生變化的,每次使用它的時候必須從內存取出 i 的值,因而編譯器生成的匯編代碼會重新從 i 的地址處讀取數據放在k中。