почему изменчивые переменные не оптимизируются даже в очень простых случаях?

если я скомпилирую код

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 оставляет этот код? есть ли от этого побочные эффекты? это единственный код в программе, так почему же оптимизатор не может просто сбросить его?

5
задан Alek86 23 November 2011 в 21:01
поделиться