面試問題之C++語言:volatile關鍵字的作用


volatile的作用

  volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性;使用volatile指每次從內存中讀取數據,而不是從編譯器優化后的緩存中讀取數據,簡單來講就是防止編譯器優化。

  在單任務環境中,如果在兩次讀取變量之間不改變變量的值,編譯器就會發生優化,會將RAM中的值賦值到寄存器中;由於訪問寄存器的效率要高於RAM,所以在需要讀取變量時,直接寄存器中獲取變量的值,而不是從RAM中。

  在多任務環境中,雖然在兩次讀取變量之間不改變變量的值,在一些情況下變量的值還是會發生改變,比如在發生中斷程序或者有其他的線程。這時候如果編譯器優化,依舊從寄存器中獲取變量的值,修改的值就得不到及時的響應(在RAM還未將新的值賦值給寄存器,就已經獲取到寄存器的值)。

  要想防止編譯器優化,就需要在聲明變量時加volatile關鍵字,加關鍵字后,就在RAM中讀取變量的值,而不是直接在寄存器中取值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM