gpt4 book ai didi

c - 为什么LLVM要为同一个程序多加两条指令?

转载 作者:太空狗 更新时间:2023-10-29 16:59:01 25 4
gpt4 key购买 nike

我正在编译这个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com