/volatile(volatile 关键字解释)

指定如何解释 volatile 关键字。

语法

/volatile:{iso|ms}

参数

/volatile:iso
选择 ISO 标准 C++ 语言定义的严格 volatile 语义。 acquire/release 语义在 volatile 访问中不能得到保证。 如果编译器面向 ARM(ARM64EC 除外),则是 volatile 的默认解释。

/volatile:ms
选择 Microsoft 扩展的 volatile 语义,它增加了超出 ISO 标准 C++ 语言的内存排序保证。 acquire/release 语义在 volatile 访问中得到保证。 但是,此选项也强制编译器生成硬件内存障碍,这可能会在 ARM 和其他弱内存排序体系结构上增加大量开销。 如果编译器面向 ARM64EC 或任何非 ARM 平台,则是 volatile 的默认解释。

备注

强烈建议在处理跨线程共享的内存时,使用 /volatile:iso 以及显式同步基元和编译器内部函数。 有关详细信息,请参阅 volatile

如果在项目中间移植现有代码或更改此选项,则启用警告 C4746 来识别受语义差异影响的代码位置可能很有帮助。

没有 #pragma 等效项来控制此选项。

在 Visual Studio 中设置 /volatile 编译器选项

  1. 打开项目的“属性页”对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“命令行”属性页

  3. 在“附加选项”框中,添加“/volatile:iso”或“/volatile:ms”,然后选择“确定”或“应用”保存更改。

另请参阅

volatile
MSVC 编译器选项
MSVC 编译器命令行语法