[C++, CPP] 變數
volatile修飾詞
- volatile修飾詞:表示變數值可由外部程序做非同步修改
- 宣告一個名為num的volatile變數
volatile int num = 0;
- 宣告一個名為num的volatile變數
- volatile是容易變化的意思,表示其值的有效性非常短暫,可能被別的程式或其它因素而遭到修改
- volatile變數不會被最佳化,或存到暫存器
- 編譯器無法將volatile變數最佳化,降低程式效率
- volatile變數存在記憶體中
- 對於經常要存取的值,系統會將其放到暫存器中
- 因為多執行緒程式或外部程式隨時有可能修改記憶體中volatile的值,所以不能將其放到暫存器中,避免讀取到錯誤的資料
- 最佳化前,一般程式中若對同一個變數做多次指派,則只有最後一次是有意義的
num = 3; num = 0; num = 5;
最佳化後:num = 5;
- volatile變數存在記憶體中
- 在嵌入式系統中較常用volatile修飾詞
- 在嵌入式系統中,有些變數可以對應到IC的腳位
- 例如指派PortA=4可以使Led亮一次,假設想讓Led亮三次 寫法為:
PortA=4; PortA=4; PortA=4;
- 如果沒將PortA宣告為volatile,則編譯器可能會將程式最佳化為PortA=4; Led只亮一次