8

コンパイル単位のコレクションごとに GCC によって生成されるオブジェクト コードの量を正確に知りたいのですが、binutils の「サイズ」コマンドで正しい結果が得られないという奇妙な問題が発生しています。

この関数のみを含む C ファイルを見てみましょう。

int foo (int a, int b)
{
  return a+b;
}

これをコンパイルして、"size" と "objdump" の両方を使用してオブジェクト コードのサイズを確認できます。

$ gcc -O foo.c -c
$ size foo.o
   text    data     bss     dec     hex filename
     52       0       0      52      34 foo.o
$ objdump -d foo.o

foo.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <foo>:
   0:   8d 04 37                lea    (%rdi,%rsi,1),%eax
   3:   c3                      retq   

objdump の出力から、オブジェクト コードのサイズが 4 バイトであることは明らかです。ただし、size は 52 バイトを報告しますが、これは正しくありません。

「-D」オプションを objdump に使用することから、例外処理コードのように見えますが、他のものが「サイズ」によって測定され、実際に気にするコードのサイズに追加されている可能性があります。これらのエクストラを無視するサイズを取得する比較的簡単な方法を知っている人はいますか?

4

1 に答える 1