は、私は、アセンブリに翻訳されましたどのように特定のC/C++の機能に見てみたかったと私は、次のファイルを作成しました:私は、その後(g++ -S
でも試してみました)gcc -S
でこれをコンパイルgccが冗長アセンブリコードを作成するのはなぜですか?
struct foo {
int x;
char y[0];
};
char *bar(struct foo *f)
{
return f->y;
}
を私が見たときにライン
、とりわけ_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:
を:アセンブリコード、私はgcc
が離れて最適化することができるはずと思っバー機能に些細な冗長性を見つけることが失望しました
movq %rax, -24(%rbp)
movq -24(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
は無意味なようです。 gcc(そしておそらく他のコンパイラ)がこれを最適化できない理由がありますか?
標準的な最適化を有効にするには、-Oスイッチを指定してgccを実行してください。 –
どのバージョンのgccを使用していますか? –