コンパイラの最適化を研究しているときに、次のコードを単純にコンパイルしました。
#include<stdio.h>
struct fraction {
int num ;
int denum ;
};
int main()
{
struct fraction pi;
pi.num = 22;
pi.denum = 7;
return 0;
}
使用して
gcc test.c -o test
これを逆アセンブルすると、次のようになります。
push %ebp
mov %esp,%ebp
sub $0x10,%esp
movl $0x16,-0x8(%ebp)
movl $0x7,-0x4(%ebp)
mov $0x0,%eax
leave
ret
しかし、次のような最適化を適用すると:
gcc test.c -o test -O3
分解で得られるのは次のとおりです。
push %ebp
xor %eax,%eax
mov %esp,%ebp
pop %ebp
ret
最適化を使用しない場合、値 22 と 7 は逆アセンブリで明確に表示され、コードがどのように機能するかを明確に理解できましたが、最適化後、これらの値はどこにあるのでしょうか? コードは現在どのように機能していますか? 誰か説明してください。