2012-06-15 5 views
5

これはLinuxのgcc 4.4.6です。 gccコンパイル時間とメモリ使用量がソースコードの変更で配列サイズとして変化する

gcc bizarre.c 

はその後、コンパイラはメモリの4Gを使用し、長い時間を要する:

は、ここで私は、この使用してコンパイルした場合の挙動

bizarre.c

double a[500000000]; 

main() { 
} 

です。

アレイのサイズを50000000にすると、コンパイルにかかるメモリと時間が大幅に減ります。

コンパイラがコンパイルしているコードを実行しているようです。

私は、このように巨大な配列を作成するのがベストプラクティスではないかもしれないが、説明は何かを理解していますか?

+0

32ビットまたは64ビットの実行可能ファイルとしてコンパイルしますか? –

+0

最適化フラグはありませんか?おそらく最適化をオンにすると、この変数はおそらく-O0 –

+0

@ 0A0Dよりも高い最適化を使用すると削除されます:この配列は '.bss'セクションに埋め込まれていますが、スタックなし... – sarnold

答えて

6

これは、--build-idに関連する既知のリンカーのバグで、現在メインラインで修正されています。 http://sourceware.org/bugzilla/show_bug.cgi?id=12451を参照してください。一部のディストリビューションでは、Nickの以前のパッチを使用して、.bss上にチェックサムを不必要に計算し、.bssセクションを割り当ててゼロにする必要がありました。あなたのディストリビューションに不平を言う。

関連する問題