共用方式為


靜態 (C++)

您可以使用宣告的型別限定詞物件在程式中修改的硬體。

volatile declarator ;

備註

您可以使用 /volatile 編譯器參數修改編譯器如何解譯這個關鍵字。

Visual Studio 會根據目標架構不同解譯 volatile 關鍵字。 對於號誌,否則,如果 /volatile 編譯器選項都沒有指定,編譯器會執行,將指定的 /volatile:iso 。 對於非 ARM 之外的結構,則為,如果 /volatile 編譯器選項都沒有指定,編譯器會執行,就如同 /volatile:ms 指定了;除了和之外的,因此,為了結構強烈建議您指定 /volatile:iso,並使用明確的同步處理原始物件和編譯器內建,當您處理跨執行緒共用記憶體時。

您可以使用 volatile 限定詞可以存取由非同步處理序使用例如中斷處理常式的記憶體位置。

當 volatile 中還有 __restrict 關鍵字的變數時, volatile 會取得優先權。

如果 struct 成員標記為 volatile,則 volatile 會傳播至整體結構。 如果結構沒有以指示,在目前的結構可以複製的長度, volatile 在該結構可能會遺失。

如果符合下列任一狀況, volatile 關鍵字可能會對欄位的無效:

  • Volatile 欄位長度超過以指示,在目前的結構可以複製的最大值。

  • 最外層包含的 struct的長度,或者是成員可以巢狀 struct—超過以指示,在目前的結構可以複製的最大值。

雖然這個處理器不重新排列非快取記憶體存取,必須標記為不可快取變數成 volatile 保證編譯器不重新排列記憶體存取。

宣告的物件,因為 volatile 不用於某些最佳化,因為它們的值可能會隨時變更。 系統一定會讀取 Volatile 物件的目前值,在收到要求時,,即使先前指示要求相同物件的值。 此外,物件的值會在工作中。

ISO 標準

如果您熟悉 C# volatile 關鍵字或熟悉 volatile 行為在舊版的 Visual C++,請注意 C++11 ISO 標準 volatile 關鍵字不同和支援的 Visual Studio,則指定 /volatile:iso 編譯器選項時。 (預設為號誌,它指定了)。 volatile 關鍵字可 C++11 ISO 標準程式碼要針對硬體存取只使用;不要為與執行緒使用它。 如需執行緒相互通訊,請使用機制 (例如從 C++ 標準樣板程式庫std::atomic<T>

Microsoft 專有的

/volatile:ms 編譯器選項是使用由預設時,除了和之外的結構目標此時編譯器產生額外的程式碼會在參考中的順序對 Volatile 物件除了維護的順序以外的其他全域物件的參考。 特別之處在於:

  • volatile 物件 (也稱為 Volatile 寫入) 的寫入有語意;即為結果全域或靜態物件的參考,在 volatile 物件的寫入在指令序列之前先發生暫時性撰寫在編譯過的二進位檔。

  • 讀取 Volatile 物件 (也稱為讀取 Volatile) 取得語意;即為結果全域或靜態物件的參考,在讀取指令序列的動態記憶體之後會發生寫入編譯過的二進位檔之後的那個 Volatile。

這可讓 volatile 物件為記憶體鎖定和版本使用在多執行緒應用程式。

注意事項注意事項

當它依賴提供增強確定時,如果使用的是 /volatile:ms 編譯器選項,程式碼是不可移植的。

請參閱

參考

C + + 關鍵字

const (C++)

常數和變動指標