我编译了这个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
上保存几个字节。也许编译器编写器决定通过推送寄存器来优化这种情况。
关于c - cl.exe产生奇怪的汇编代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8566262/