если я скомпилирую код
int main()
{
int i;
i = 1;
i = 2;
}
в VS с Release и оптимизацией, разборка будет выглядеть так:
int main()
{
int i;
i = 1;
i = 2;
}
010D1000 xor eax,eax
010D1002 ret
но если я напишу слово «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
кто-нибудь знает, почему VS оставляет этот код? есть ли от этого побочные эффекты? это единственный код в программе, так почему же оптимизатор не может просто сбросить его?