作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编译这个 C 程序并比较生成的汇编代码:
int main(){ return 0; }
GCC给出这个主要功能(cc hello.c -S
):
_main:
LFB2:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
movl $0, %eax
leave
ret
LLVM给出这个主要功能(clang hello.c -S
):
_main:
Leh_func_begin0:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
movl $0, %eax
movl $0, -4(%rbp)
popq %rbp
ret
Leh_func_end0:
movl $0, -4(%rbp)
和 popq %rbp
有什么用?在堆栈上移动一些东西然后直接弹出它对我来说似乎没用。
最佳答案
movl $0, -4(%rbp)
指令已失效,因为这是未优化的代码。尝试将 -O
传递给两个编译器,看看有什么变化。
关于c - 为什么LLVM要为同一个程序多加两条指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4903912/
我是一名优秀的程序员,十分优秀!