如果不用volatile關鍵字會如何?可能會造成乙個後果就是:編譯器發現你多次使用同乙個變數的值,然後它可能會假設這個變數是不變的值,並且把這個變數的值放入暫存器中,方便下一次使用,提高訪問速度。
乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,
編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在
暫存器裡的備份。
另外,這裡貼上下mutable關鍵字以及再談const關鍵字的一些解釋:
關鍵字volatile和register
用關鍵字volatile宣告變數,是用來告訴編譯器每次對此變數的引用都需要從記憶體位址中讀取,即取消編譯器對此變數的優化編譯。當某次引用沒用volatile宣告的變數時,其被編譯器從記憶體位址中讀取到ax 某通用暫存器 中,那麼在其後的引用中,如果ax暫存器沒用被改變,那麼編譯器會優化成直接讀取ax...
關鍵字 mutable和volatile
1 mutable 在c 中,mutable是為了突破const的限制而設定的。被mutable修飾的變數,將永遠處於可變的狀態,即使在乙個const函式中,甚至結構體變數或者類物件為const,其mutable成員也可以被修改。1.structst 2.3.10.11.constst st 12....
關鍵字volatile和restrict
一 什麼是volatile?什麼是編譯器優化 volatile是乙個型別修飾符,它的主要作用是防止編譯器進行優化。那麼什麼是編譯器優化呢,我們看兩個個例子 例1 x 0x04 x 0x06 x 0x08 對於硬體來說這是3條指令,依次執行,但是如果讓編譯器進行編譯,則它會忽略前面兩條語句,直接得到 ...