2011-12-20 24 views
0

は、私は次のプログラムがあるとします。私はWindows 7の32ビットのMicrosoftのコンパイラ(cl.exe /O1 sample.c)とそれをコンパイルする場合違い、出力実行可能ファイルサイズの面で

#include <stdio.h> 
int main() 
{ 
    printf("This is a sample C program.\n"); 
    return 0; 
} 

をマシンは、44KBの実行可能ファイルを出力します。

CentOS 64ビットマシン上のGNUコンパイラ(gcc sample.c)でコンパイルすると、6 KBの実行可能ファイルが出力されます。

一般に、この小さなプログラムのファイルサイズには、大きな違いがありますか?なぜ行を印刷して終了するのにWindows 44KBが必要ですか?

+1

http://stackoverflow.com/questions/1495638/whats-in-a-exe-file。 –

+0

あなたのコードをprintf( "%f"、1.23)に変更することによって違いを見ることができます。 –

答えて

2

/MDスイッチをcl.exeとともに使用すると、msvcrt(Microsoft Cランタイムライブラリ)と動的にリンクし、msvcrt.dllを使用します(それに相当する実行可能ファイルサイズは6KBになります)。 Cライブラリのコードは実行可能ファイルに静的にリンクされ、実行ファイルのサイズが大きくなります。

CentOSのgccコンパイラは、デフォルトでCライブラリと動的にリンクするように設定されています。

0

上記のリンクの他に、thisは、gccを使用してコンパイルするときに何が起こるかを理解するのに役立ちます。

関連する問題