MSVC 2015优化了不稳定变量?

时间:2016-11-02 09:14:37

标签: c visual-studio visual-c++ visual-studio-2015 side-effects

我在MSVS2015中以发布模式编译了以下代码:

#include "stdafx.h"
#include "stdio.h"

void f()
{
    for (int i = 0; i < 10; i++)
    {
        volatile int var = 10;
        if (var) // Breakpoint can't be set
        {
            printf("Test\n"); // Breakpoint can't be set
        }
    }
}

int main()
{
    f();
    return 0; // Second breakpoint
}

我认为volatile关键字不允许编译器优化变量,但由于我无法设置断点,因此我无法检查变量的值和它看起来像是完全优化的。

我对volatile和副作用有不正确的理解吗?

更新

MSVS Version : 14.0.25431.01 Update 3

反汇编(发布):

#include "stdafx.h"
#include "stdio.h"


void f()
{
    for (int i = 0; i < 10; i++)
    {
        volatile int var = 10;
        if (var)
        {
            printf("Test\n");
        }
    }
}


int main()
{
00FE1040  push        ebp  
00FE1041  mov         ebp,esp  
00FE1043  push        ecx  
00FE1044  push        esi  
    f();
00FE1045  mov         esi,0Ah  
00FE104A  nop         word ptr [eax+eax]  
00FE1050  mov         dword ptr [ebp-4],0Ah  
00FE1057  cmp         dword ptr [ebp-4],0  
00FE105B  je          main+2Ah (0FE106Ah)  
00FE105D  push        offset string "Test\n" (0FE20F8h)  
00FE1062  call        printf (0FE1010h)  
00FE1067  add         esp,4  
00FE106A  sub         esi,1  
00FE106D  jne         main+10h (0FE1050h)  
    return 0;
00FE106F  xor         eax,eax  
00FE1071  pop         esi  
}
00FE1072  mov         esp,ebp  
00FE1074  pop         ebp  
00FE1075  ret  

0 个答案:

没有答案