[C++, CPP 教學 教程 教材 Tutorial] 變數 - volatile修飾詞
YehYeh\'s Notepad yehyeh@gmail.com 

[C++, CPP] 變數

volatile修飾詞

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