說明:******乙個被volatile關鍵字修飾的變數可能會被意想不到的改變,本意就是「易變的」。
******對於被volatile修飾的變數,當編譯器在編譯的時候不會去假設該變數的值
******對於被volatile修飾的變數,當優化器優化時,必須每次都小心的重新讀取該變數的值,而不能使用暫存器裡的備份。
使用volatile關鍵字的幾種情況:
******第一種情況:並行裝置中的狀態暫存器(當不同裝置訪問時,狀態可能會隨時變化的,所以要用volatile關鍵字修飾)
******第二種情況:乙個中斷服務子程式中會訪問到的非自動變數(例如static變數)
******第三種情況:在多執行緒應用中多個任務會訪問到的共享變數。
有關volatile的幾個問題:
******1.乙個引數既可以是const的也可以是volatile的嗎?
***答:可以的,乙個唯讀的狀態暫存器。它是const,因為程式不應該試圖去修改它,它是volatile,因為它的值可能會被意想不到的改變。
******2.乙個指標可以是volatile的嗎?
***答:可以,乙個中斷服務子程式中,修改乙個指向buffer的指標。
******3.下面一段**其錯在哪兒?
int square(volatile int *ptr)
因為整型指標ptr中的值可能會被意想不到的改變,也就是說ptr在某一時刻還指向這個記憶體位址,而在另乙個時刻可能會指向另乙個記憶體位址,所以就達不到求某個數的平方的目的。
修改後的**為:
int square(volatile int *ptr)
c語言中volatile關鍵字
volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改 比如 作業系統 硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的 就不再進行優化,從而可以提供對特殊位址的穩定訪問。使用該關鍵字的例子如下 int volatile nvint 當要求使...
C語言中volatile關鍵字
一 前言 程式的優化 1 硬體級別上的優化 a.由於記憶體訪問速度遠不及cpu處理速度,為提高機器整體效能,在硬體上引入硬體快取記憶體cache,加速對記憶體的訪問。b.在現代cpu中指令的執行並不一定嚴格按照順序執行,沒有相關性的指令可以亂序執行,以充分利用cpu的指令流水線,提高執行速度。2 軟...
C語言中volatile關鍵字
1.編譯器優化介紹 由於記憶體訪問速度遠不及cpu處理速度,為提高機器整體效能,在硬體上引入硬體快取記憶體cache,加速對記憶體的訪問。另外在現代cpu中指令的執行並不一定嚴格按照順序執行,沒有相關性的指令可以亂序執行,以充分利用cpu的指令流水線,提高執行速度。以上是硬體級別的優化。再看軟體一級...