即使我在 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/