volatile關鍵字經常是我們能夠在程式中看見的關鍵字,在c primer plus一書中,作者寫道「典型地,volatile被應用於硬體位址和其他並行執行的程式共享的資料
,例如,乙個位址中可能儲存著當前的時鐘時間。不管程式做些什麼,該位址的值都會隨著時間而改變。」
c primer plus書中舉的例子非常生動。
int a=x;
//一些和x無關的**
int b=x;
可能有的編譯器在編譯上述這樣一段**的時候,會先後兩次將x在記憶體中的數值賦給a和b。但是可能有些編譯器比較「聰明」,會將x的數值放進某個暫存器中,然後當需要執行int b=x的指令時,直接從暫存器而非記憶體中取值
,這樣可以節省時間,畢竟訪問暫存器的時間要低於的時間。
然而,這種「聰明」的做法可能會帶來***,使得「聰明反被聰明誤」。而這恰恰取決於資料x的屬性,或者說意義,如果x恰好是上文提到的「應用於硬體位址和其他並行執行的程式共享的資料
」的話,例如時間的話,那麼上面的**中的a=b=x(某個暫存器的數值),而事實上,程式設計師的本意是a=time1,b=time1+δ(執行int a=x和int b=x之間**花費的時間)。
因而可以知道,volatile關鍵的字的作用是告訴編譯器,不能假定某個變數沒有發生變化從而去進行優化(即將該數值快取在暫存器中),而是在每次用到該數值的時候都去記憶體讀書數值。簡而言之,
volatile
可以防止編譯器為了提高速度將乙個變數快取到暫存器而不寫回。
關鍵字 volatile關鍵字的作用
1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...
volatile關鍵字作用
1.阻止編譯器對 進行優化。即讀取某個變數值時,不從暫存器中讀取而是從變數裡讀。2.編譯器的優化 在本次執行緒內,當讀取乙個變數時,為提高訪問速度,編譯器優化時有時會先把變數讀取到乙個暫存器中 以後再取變數值時,就直接從暫存器中取值 當變數值在本執行緒裡改變時,會同時把變數的新值copy到該暫存器中...
volatile關鍵字的作用
在c c 語言中經常會遇到volatile關鍵字,它的字面意思是 可變的 不穩定的 volatile 會影響編譯器編譯的結果,被volatile修飾的變數是隨時可能發生變化的,編譯器對volatile變數有關的運算,不進行編譯優化,以免出錯,vc 在產生release版可執行碼時會進行編譯優化,加v...