1

重複の可能性:
C / C ++の「HelloWorld」がキロバイト単位であるのはなぜですか?

ANSICで記述された次のプログラムについて考えてみます。

file: test.c
main() {}

私はWindows7を使用しています。MinGWを使用してこのファイルをコンパイルしています。

$ gcc test.c

次に、このファイルのサイズを確認します。

$ ls -la a.exe
-rwxr-xr-x 1 Username Administrators 47902 Nov 21 15:57 a.exe

この完全に空で価値のないCプログラムは、サイズがほぼ50キロバイトのバイナリにコンパイルされるようです。なぜ世界でこれが起こっているのですか?

4

1 に答える 1

6

のようにGCCを実行しますgcc -v test.c。GCC(コンパイラー・ドライバー)は、(cc1コンパイラー)、as(アセンブラー)、およびld(リンカー)を生成します。リンカのコマンドラインを見ると、最終的な実行可能ファイルにリンクされているいくつかのファイル(、、、、など)が表示crti.ocrt0.oれます。また、それらの一部は、またはからシンボルをフェッチする場合があります。これが、サイズが数バイトではない理由を説明しています。crtbegin.ocrtend.olibgcc.alibc.a

また、を使用してマップファイルを生成することもでき-Wl,-Map=map.txtます。これにより、最終的な実行可能ファイルに含まれるすべてのオブジェクトおよびライブラリのすべての関数または変数が表示されます。

于 2012-11-21T23:14:12.177 に答える