cl.exe生成奇怪的汇编代码

时间:2011-12-19 19:17:11

标签: c visual-studio assembly x86

我编译了这个C代码:

void foo() {
    int i = 0;
    i = 0;
    i = 0;
}

我得到了这个:

push ebp
mov ebp,esp
push ecx
mov dword ptr ss:[ebp-4],0
mov dword ptr ss:[ebp-4],0
mov dword ptr ss:[ebp-4],0
mov esp,ebp
pop ebp
retn

我的问题是为什么push ecx?怎么没有sub esp,4或什么东西在堆栈上腾出空间?没有使用编译器选项。

1 个答案:

答案 0 :(得分:4)

无论哪种方式都可以在堆栈上提供4个字节的空间,push可以在sub上节省几个字节。也许编译器编写者决定通过推送寄存器来优化这种情况。