回覆列表
  • 1 # 使用者834195712159

    volatile提醒編譯器它後面所定義的變數隨時都有可能改變,因此編譯後的程式每次需要儲存或讀取這個變數的時候,告訴編譯器對該變數不做最佳化,都會直接從變數記憶體地址中讀取資料,從而可以提供對特殊地址的穩定訪問。。如果沒有volatile關鍵字,則編譯器可能最佳化讀取和儲存,可能暫時使用暫存器中的值,如果這個變數由別的程式更新了的話,將出現不一致的現象。

    程式碼示例:

    int square(volatile int *ptr)

    {

    int a,b;

    a = *ptr;

    b = *ptr;

    return a * b;

    }

    由於*ptr的值可能被意想不到地該變,因此a和b可能是不同的。結果,這段程式碼可能返不是你所期望的平方值!正確的程式碼如下:

    long square(volatile int *ptr)

    {

    int a;

    a = *ptr;

    return a * a;

    }

    注意:頻繁地使用volatile很可能會增加程式碼尺寸和降低效能,因此要合理的使用volatile。

  • 中秋節和大豐收的關聯?
  • MATLAB中clc是什麼意思?