c++ - 什么情况下 MSVC c++ 编译器选项 /volatile:ms 和 /volatile:iso 在输出汇编程序中显示差异?
问题描述
以下 msvc 命令行选项建议使用该选项/volatile:ms
(默认)引入内存围栏,但在使用/volatile:iso
. 我无法提出任何执行此操作的示例代码。
例如我的随机尝试之一
https://godbolt.org/z/qrz18j3h9
volatile int A, B;
void foo()
{
A = B+1;
B = A+1;
}
生成以下 asm
int volatile A DD 01H DUP (?) ; A
int volatile B DD 01H DUP (?) ; B
voltbl SEGMENT
_volmd DB 00H
DB 08H
DB 0eH
DB 016H
voltbl ENDS
void foo(void) PROC ; foo, COMDAT
mov eax, DWORD PTR int volatile B ; B
inc eax
mov DWORD PTR int volatile A, eax ; A
mov eax, DWORD PTR int volatile A ; A
inc eax
mov DWORD PTR int volatile B, eax ; B
ret 0
void foo(void) ENDP
无论我是使用选项/volatile:ms
还是/volatile:iso
使用 Visual Studio 2019。
有人可以提供一个示例,说明上述两个选项对输出汇编代码有影响吗?
解决方案
推荐阅读
- django - Django表单:如何在下拉列表中仅显示与用户关联的对象
- python - 在数据帧上乘向量 - 向量化
- javascript - 如何使用 web 服务从 asp.net 中的数据库中填充“选择”
- python - 如何从 setup_require 依赖项覆盖 setuptools 命令?
- php - 如何使用 php 创建摄氏度到华氏度的转换表?
- hibernate - JPA-Hibernate 一对一 - 在这种情况下延迟加载真的有效吗?
- bash - 问题:在 docker 中运行 ubuntu bash shell 时出错
- json - Aeson:解析 json 对象以列出
- html - 并排的两个内容块
- javascript - JavaScript - 将事件处理程序附加到元素也会将它们附加到其子元素