volatile關鍵字:防止被編譯器優化;下面是在Linux環境下的解釋:
*注釋:解釋下linux下的優化:
Linux下,gcc 是指gcc c編譯器。編譯選項-O1告訴編譯器使用第一級優化。增加優化會使程序執行的更快,但是也會有一定的缺點,它會造成機器代碼很大程度的變化,從而使機器碼和原代碼很難對應起來。從程序方面考慮我們會經常使用第二級優化-O2。這個問題以後介紹。
下來我們看下面代碼沒有加關鍵字volatile
通過下面不加優化命令得到結果;
可以看到結果被改變。
通過下面加優化的命令得到結果:
可以看見沒有改變。
因為經過優化後的變量會放在寄存器中。前面已經說過寄存器是速度最快的。
下面是加volatile的代碼:
可以看到,雖然經過-O2優化,但是加volatile後10還是被改成20;
結論:
volatile關鍵字是防止編譯器對其變量進行優化。