【发布时间】:2012-05-26 15:22:08
【问题描述】:
我想研究某些 C/C++ 功能是如何转换为程序集的,我创建了以下文件:
struct foo {
int x;
char y[0];
};
char *bar(struct foo *f)
{
return f->y;
}
然后我用gcc -S 编译了这个(也试过用g++ -S)但是当我查看汇编代码时,我很失望地发现bar 函数中有一个微不足道的冗余,我认为gcc 应该能够优化掉:
_bar:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
movabsq $4, %rcx
addq %rcx, %rax
movq %rax, -24(%rbp)
movq -24(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
popq %rbp
ret
Leh_func_end1:
除其他外,线条
movq %rax, -24(%rbp)
movq -24(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
似乎毫无意义的多余。 gcc(可能还有其他编译器)有什么理由不能/不优化这个吗?
【问题讨论】:
-
请使用 -O 开关运行 gcc 以启用标准优化。
-
您使用的是哪个版本的 gcc?
标签: c optimization gcc assembly compiler-construction