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