我编译了这个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
或什么东西在堆栈上腾出空间?没有使用编译器选项。
答案 0 :(得分:4)
无论哪种方式都可以在堆栈上提供4个字节的空间,push
可以在sub
上节省几个字节。也许编译器编写者决定通过推送寄存器来优化这种情况。