1

私はこの簡単なコードを持っています。

#include<stdio.h>
    int main()
    {
      return 0;
    }

実行可能ファイルで size コマンドを実行すると、次の出力が表示されます

   text    data     bss     dec     hex filename
   1053     276       4    1333     535 a.out

私の質問は、初期化されていないグローバル変数または静的変数がないのに、なぜ bss が 4 バイトなのですか?

4

1 に答える 1

8

コードを標準 C ライブラリにリンクします。main()具体的には、開始前に実行され、リターン後に再度実行されるコードに対してリンクしmain()ます。

そのコードには、データと bss の要件があります。

これらの要件を回避したい場合は、標準ライブラリなしでリンクを試すことができます:

$ gcc  -nostartfiles -nostdlib -nodefaultlibs x.c
$ size a.out
  text     data     bss     dec     hex filename
   118        0       0     118      76 a.out

もちろん、プログラムに他の (重要な!) 変更を加える必要があります。

$ cat x.c 
void _start() {
  __asm("mov $1, %eax; mov %eax,%ebx; int $0x80");
}

参考文献:

于 2013-04-30T14:50:49.187 に答える