Ale*_*k86 5 c++ optimization volatile
如果我编译代码
int main()
{
int i;
i = 1;
i = 2;
}
Run Code Online (Sandbox Code Playgroud)
在具有发布和优化的VS中,反汇编看起来像:
int main()
{
int i;
i = 1;
i = 2;
}
010D1000 xor eax,eax
010D1002 ret
Run Code Online (Sandbox Code Playgroud)
但如果我写"volatile"这个词:
int main()
{
01261000 push ecx
volatile int i;
i = 1;
01261001 mov dword ptr [esp],1
i = 2;
01261008 mov dword ptr [esp],2
}
0126100F xor eax,eax
01261011 pop ecx
01261012 ret
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么VS留下这个代码?这有什么副作用吗?它是程序中唯一的代码,为什么优化器不能把它扔掉?
如果挥发性变量可以被优化掉,那会破坏它们的目的,不是吗?将volatile放在var上告诉编译器你知道它没有的东西.这个var的某些东西可能完全超出了程序的范围.如果编译器对此进行了优化,则会破坏这些计划.