c++ - 为什么编译器不能优化这两条语句?

标签 c++ visual-c++ compiler-optimization

即使我在 Visual C++ 中打开完全优化,编译器也无法优化 main 中的以下 2 条语句是否有任何原因?访问内存中的 int 变量有什么副作用吗?

int _tmain(int argc, _TCHAR* argv[])
{
    volatile int pleaseOptimizeMeOut = 100;

    (pleaseOptimizeMeOut);

    return 0;
}

最佳答案

它无法优化它们,因为您已将变量声明为 volatile。对 volatile 限定对象的加载和存储是 C 抽象机的“外部可见”效果的一部分。

(顺便说一句,访问内存中的变量时有很多的副作用;它可以更新包括 TLB 在内的硬件内存缓存,也可能导致页面错误。内存是你的进程正在执行可能正在被另一个进程窥探,比如调试器)。

关于c++ - 为什么编译器不能优化这两条语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3800890/

相关文章:

c++ - 重载 * 运算符 - 必须采用零个或一个参数

java - 16 位灰度的 tiff 规范

c++ - 从 OpenCV FileNodeIterator 保存/读取矩阵

c++ - 从嵌套范围返回值优化

C++:ios::out 是用新文件替换文件还是破坏文件内容?

c++ - 移动构造函数和继承

c++ - Windows 下的确定性构建

c++ - if-else 树优化

c++ - 优化是否应用于单行函数?

c++ - 让函数指针模板参数接受右值引用是否合法?