2012年12月4日 星期二

C 語言的 volatile 關鍵字


volatile 字面上的意思可解讀為 "易變的 反覆無常的"。

網路上 (http://adrianhuang.blogspot.tw/2011/08/cvolatile.html) 的解釋為:
volatile 變數代表其所儲存的內容會不定時地被改變,宣告 volatile 變數用來告訴 Compiler 不要對該變數做任何最佳化操作,凡牽涉讀取該 volatile 變數的操作,保證會到該變數的實體位址讀取,而不會讀取 CPU 暫存器的內容 (目的是提升效能) 。舉個例子,某一硬體狀態暫存器  (Status Register) 就必須宣告 volatile 關鍵字,因為該狀態暫存器會隨時改變,宣告 volatile 便可確保每次讀取的內容都是最新的。
O'REILLY 書中有這樣的解釋:
有 volatile 關鍵字宣告的 變數/物件,表示它可能會被其他執行中的程式或事件所修改。volatile 關鍵字告訴 Compiler 每次要用到此 變數/物件 的值時,即使程式本身並沒有修改到它的值,都要重新讀取!
常用到 volatile 的情形有:
  1. 硬體暫存器,如狀態暫存器
  2. 多執行緒所共用的全域變數
  3. 中斷服務函式 (Interrupt Service Rountie,ISR) 所使用的全域變數

沒有留言:

張貼留言