volatile的本意是「易變的」
由於訪問暫存器的速度要快過ram,所以編譯器一般都會作減少訪問外部ram的優化。對於乙個變數,如果編譯器發現賦值後,沒有變化,編譯器就可能優化**,直接從暫存器或取資料,而不是從記憶體獲取。如果由於某種原因,變數被作業系統等編譯器未知的原因更改,程式可能沒有獲得最新的值。
volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如:作業系統、硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的**就不再進行優化,從而可以提供對特殊位址的穩定訪問。
使用該關鍵字的例子如下:
int volatile nvint;
當要求使用volatile 宣告的變數的值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料。而且讀取的資料立刻被儲存。
注意,在vc6中,一般除錯模式沒有進行**優化,所以這個關鍵字的作用看不出來。
一般說來,volatile用在如下的幾個地方:
1、中斷服務程式中修改的供其它程式檢測的變數需要加volatile;
2、多工環境下各任務間共享的標誌應該加volatile;
3、儲存器對映的硬體暫存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義;
另外,以上這幾種情況經常還要同時考慮資料的完整性(相互關聯的幾個標誌讀了一半被打斷了重寫),在1中可以通過關中斷來實現,2中可以禁止任務排程,3中則只能依靠硬體的良好設計了。
volatile關鍵字的說明以及測試
volatile關鍵字是一種類似const等等的型別修飾符,是c c 中乙個比較生僻的並且用得比較少的關鍵字,今天想說說它,是因為上次去tx面試的時候,被面試官問到,幸好前一天我在 c和指標 上面看到乙個例子,就臨時查了下這個關鍵字的作用。這個關鍵字的作用是,用它宣告的型別變數不允許編譯器進行優化處...
關鍵字 volatile關鍵字的作用
1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...
關鍵字volatile詳解
與關鍵字const一樣,關鍵字volatile也是乙個型別修飾符 type specifier 關於volatile的作用 例如程式清單 volatile int m 10 int k,n m k i volatile將告訴編譯器,整形變數m是隨時發生變化的,每次使用m的時候,都要求從m的位址中找出...