Tôi đang biên soạn chương trình C này và so sánh các mã lắp ráp tạo:Tại sao LLVM thêm hai hướng dẫn bổ sung cho cùng một chương trình?
int main(){ return 0; }
GCC cho chức năng này chính (cc hello.c -S
):
_main:
LFB2:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
movl $0, %eax
leave
ret
LLVM cho chức năng chính này (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)
và popq %rbp
cần thiết cho mục đích gì? Di chuyển một cái gì đó trên ngăn xếp và popping nó trực tiếp sau đó có vẻ vô dụng với tôi.
Có vẻ như một chút không công bằng khi so sánh đầu ra của trình biên dịch mà không sử dụng trình tối ưu hóa. –