??volatile 是 C語言 中規(guī)定的一個關(guān)鍵字,C語言課程中很少會提及,自己看書也容易忽視的一個 C語言 關(guān)鍵字。
??但是,volatile 關(guān)鍵字在嵌入式開發(fā)中很常用,并且在筆試面試時會經(jīng)常會讓你解釋 volatile 關(guān)鍵字的作用。
??內(nèi)存 ? \Longrightarrow ? 寄存器(CPU)
2. 寫變量??寄存器(CPU) ? \Longrightarrow ? 內(nèi)存
int a, b; //為a,b申請內(nèi)存。
a = 1; //1 ->寄存器
//寄存器 ->內(nèi)存(&a)
b = a; //內(nèi)存(&a)->寄存器
//寄存器 ->內(nèi)存(&b)
??在計算機工作時,內(nèi)存的訪問速度遠不及CPU的處理速度,為了提升計算機的整體性能,在軟硬件層面都有相應(yīng)的機制去優(yōu)化內(nèi)存的訪問,即減少內(nèi)存的訪問次數(shù)。
1. 硬件層面:??引入高速緩存(Cache)
2. 軟件層面:??① 編碼優(yōu)化(程序員)
??② 編譯優(yōu)化(編譯器)
??volatile 的意思即為“易變的”,在 C語言 中當使用 volatile 修飾一個變量時,即表示這個變量的值隨時都有可能發(fā)生改變。
??因此編譯器在編譯的時候?qū)υ撟兞康拇嫒〔僮鞑荒苓M行優(yōu)化,即告訴編譯器每次存取該變量的時候都要從內(nèi)存中去存取而不是使用其之前在寄存器中的備份。
volatile int a = 1, b, c; //為a,b,c申請內(nèi)存并初始化。
b = a; // 內(nèi)存(&a)->寄存器
// 寄存器 ->內(nèi)存(&b)
c = a; // 內(nèi)存(&a)->寄存器 (避免這步被編譯器優(yōu)化省略,則添加volatile進行特征修飾)
// 寄存器 ->內(nèi)存(&c)
??中斷服務(wù)程序中若修改其他程序中使用的變量,需用volatile修飾該變量。
2. 多線程??多個線程都要訪問的變量一般需要加volatile修飾。
3. 硬件寄存器??硬件寄存器的值有可能會隨著硬件工作狀態(tài)的變化而改變,需要加volatile修飾。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧