1. 程式人生 > >Volatile關鍵字的作用

Volatile關鍵字的作用

多任務 中斷 con detail 需要 spa tails 存儲器 應該

定義:詞義,易變的, 實質是直接存取原始內存地址

(1)作用

  volatile關鍵詞影響編譯器編譯的結果,用 volatile聲明的變量表示該變量隨時可能發生變化,與該變量有關的運算,不要進行編譯優化,以免出錯

  1.告訴編譯器不要做任何優化

  2.用volatile定義的變量會在程序外被改變,每次都必須從原始內存中讀取,而不能重復使用放在cache或寄存器中的備份

(2)為什麽會可能內改變?

  變量可能被當前代碼之外的因素而改變:

  1.中斷服務程序中修改的供其它程序檢測的變量需要加volatile:中斷處理程序isr中更改了這個變量的值

  2.多任務環境下各任務間共享的標誌應該加volatile:多線程中在別的線程更改了這個變量的值

  3.存儲器映射的硬件寄存器通常也要加voliate:硬件自動更改了這個變量的值(一般這個變量是一個寄存器的值)

(3)幾個問題

  1.一個參數既可以是const還可以是volatile嗎?

    可以的,例如只讀的狀態寄存器。它是volatile因為它可能被意想不到地改變。它是const因為程序不應該試圖去修改它

  2.一個指針可以是volatile 嗎?

    可以,當一個中服務子程序修該一個指向一個buffer的指針時

註意:頻繁地使用volatile很可能會增加代碼尺寸和降低性能,因此要合理的使用volatile

參考 http://blog.csdn.net/dev_linux/article/details/44829549

Volatile關鍵字的作用