volatile 關鍵字的理解

volatile這個關鍵詞,之前在學C 的時候,貌似理解了,又忘記了,今天在學習linux 的C 編程中,再次碰到了,這本書上講的比較透徹,爲何要有這個關鍵字,是由於代碼編譯的時候,編譯器會對指令進行優化,優化的地方通常是同一變量訪問直接從寄存器裏訪問,而再也不直接對實際的物理地址進行操做,這樣,致使操做不成功,例如: 屢次從同一個變量取值,那麼代碼優化後,可能直接從上一次的寄存器裏取值(這樣快一些),而再也不從變量的內存地址取值, 若是這個變量其實是被修改過了,那此次操做就失敗了。寫數據也是同樣的道理,因此,對於這樣的狀況,咱們就要告訴編譯器,你優化代碼的時候,不能對個人這個變量讀寫操做進行優化,要老老實實地對實際物理地址進行操做,不要使用寄存器的數據,也不要使用cache裏的數據,這就是volatile的做用。linux

通常是設備寄存器,或者全局變量,信號量,多線程等 編程

相關文章
相關標籤/搜索