我编译了这段 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
或其他东西来在堆栈上腾出空间?未使用编译器选项。
最佳答案
任一方法都会在堆栈上提供 4 个字节的可用空间,push
会在 sub
上节省几个字节。也许编译器作者决定通过压入寄存器来优化这种情况。
关于cl.exe 产生奇怪的汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8566262/