【发布时间】:2020-05-23 23:20:05
【问题描述】:
我开始学习汇编,所以我使用命令gcc -S file.c 来获取我的 C 代码的汇编版本。
一切正常,但我注意到当我输入一个简单的代码时,例如:
void ft_return_strlen(char *str)
{
int a;
a = strlen(str);
return (a);
}
gcc -S file.c 命令给了我这个:
_ft_return_strlen:
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset %rbp, -16
movq %rsp, %rbp
.cfi_def_cfa_register %rbp
subq $16, %rsp
movq %rdi, -8(%rbp)
movq -8(%rbp), %rdi
callq _ft_strlen
movl %eax, -12(%rbp)
movl -12(%rbp), %eax
addq $16, %rsp
popq %rbp
retq
即使这个函数没用,为什么 gcc 给我这些行?
movq %rdi, -8(%rbp)
movq -8(%rbp), %rdi
他们不是没用吗?如果这些行真的没用,它们是来自我的代码还是来自 gcc?有什么办法可以改善吗?
【问题讨论】:
-
尝试优化:
gcc -O3 -
它们不是没用的,它们的存在是有原因的,但它与优化级别有关,尝试 -O2 或赌博 -O3
-
确实你是对的,当我使用优化时它们会消失。我将阅读有关此优化标志的更多信息。谢谢!