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

标签 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 或其他东西来在堆栈上腾出空间?未使用编译器选项。

最佳答案

任一方法都会在堆栈上提供 4 个字节的可用空间,push 会在 sub 上节省几个字节。也许编译器作者决定通过压入寄存器来优化这种情况。

关于cl.exe 产生奇怪的汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8566262/

相关文章:

c - 海量随机数的动态频率评估

c - Unix 套接字示例,编译器找不到 header

c - 阐明按位运算符,非负操作数和类型转换如何交互

assembly - ARMv8 高级 SIMD : "invalid addressing mode at operand 2 -- ` st1 {V1. D}[0],[x20,640 ]'"

C pthread 段错误

c# - Couldn't get Design Time license for 'SoftwareFX.ChartFX.Chart' error in C#解决方案

c# - 有没有办法让 MySQL 与 Visual Studio 2012 Express 一起工作?

visual-studio - 将带有 GetDate() 函数的日期时间值插入 SQL Server (2005) 表?

memory - gdb 'x' 命令有什么作用?

c++ - 为什么 if 检查没有被优化