我正在编译这个 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
需要什么?在堆栈上移动一些东西然后直接弹出它对我来说似乎没用。