【发布时间】:2011-11-25 01:33:15
【问题描述】:
在 C++03 中,标准可观察行为 (1.9/6) 包括读取和写入易失性数据。现在我有了这个代码:
int main()
{
const volatile int value = 0;
if( value ) {
}
return 0;
}
正式初始化一个 volatile 变量,然后读取它。 Visual C++ 10 发出机器代码,通过将 dword 压入栈中腾出空间,然后将零写入该栈位置,然后读取该位置。
对我来说这没有任何意义 - 没有其他代码或硬件可能知道局部变量的位置(因为它在自动存储中),因此期望该变量可能已被任何其他方读取/写入是不合理的所以在这种情况下可以消除它。
是否允许消除此变量访问?访问一个 volatile local 的地址对于任何其他方可观察的行为都不知道?
【问题讨论】:
标签: c++ visual-c++ compiler-construction volatile compiler-optimization