0

コンパイラの最適化を研究しているときに、次のコードを単純にコンパイルしました。

#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 は逆アセンブリで明確に表示され、コードがどのように機能するかを明確に理解できましたが、最適化後、これらの値はどこにあるのでしょうか? コードは現在どのように機能していますか? 誰か説明してください。

4

2 に答える 2