volatile

volatile:易變的,不穩定的。volatile用來聲明那些可能在你的程序本身不知道的情況下會發生改變的變量。


一個定義爲volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器裏的備份。
對於一般變量:爲提高存取速度,編譯器優化時有時會先把變量讀取到一個寄存器中。以後再取變量值時,就直接從寄存器中取值。


一個參數既可以是const也可以是volatile:一個例子是隻讀的狀態寄存器。它是volatile因爲它可能被意想不到地改變。它是const因爲程序不應該試圖去修改它。(簡單點就是該程序代碼不能試圖去修改它,但不排除硬件方面修改了它,我們每次都得重新讀取它的值。)


幾個應用例子:
a. 並行設備的硬件寄存器(如:狀態寄存器)。
b. 一箇中斷服務子程序中會訪問到的非自動變量。(個人理解:中斷服務子程序不能用緩存在寄存器中的值來判斷事件,因爲那個值可能被修改了,需要重新讀取。所以一般需要把這種變量聲明爲volatile。)
c. 多線程應用中被幾個任務共享的變量。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章