/volatile (volatile キーワードの解釈を)
volatile キーワードの解釈方法を指定します。
構文
/volatile:{iso|ms}
引数
/volatile:iso
ISO 標準の C++ 言語で定義されている、厳密な volatile
のセマンティックスを選択します。 volatile アクセスでは取得と開放のセマンティックスは保証されていません。 コンパイラが ARM (ARM64EC を除く) を対象とする場合、これは volatile
の既定の解釈です。
/volatile:ms
Microsoft 拡張 volatile
セマンティクスを選択すると、ISO 標準 C++ 言語を超えることを保証するメモリ オーダリングが追加されます。 volatile アクセスでは取得と開放のセマンティックスは保証されます。 ただし、このオプションにより、コンパイラはハードウェアのメモリ バリアを強制的に生成します。これによって ARM および他のメモリ オーダリングの弱いアーキテクチャでは、著しいオーバーヘッドが追加される場合があります。 コンパイラが ARM64EC または ARM 以外のプラットフォームをターゲットとする場合、これは既定の volatile
の解釈です。
解説
スレッド間で共有されるメモリを扱うときには、明示的な同期プリミティブおよびコンパイラ組み込みと共に /volatile:iso を使用することを強くお勧めします。 詳細については、「volatile」を参照してください。
既存のコードを移植するか、またはプロジェクトの途中でこのオプションを変更する場合、C4746 の警告を有効にして、セマンティックスの違いによって影響を受けるコードの場所を識別すると役立つことがあります。
#pragma
には、このオプションを制御するための相当するものはありません。
/volatile コンパイラ オプションを Visual Studio で設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳しくは、「Visual Studio で C++ コンパイラとビルド プロパティを設定する」をご覧ください。
[構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。
[追加オプション] ボックスで、/volatile:iso または /volatile:ms を追加してから、[OK] または [適用] を選択して変更を保存します。