5

これは Linux の gcc 4.4.6 です。

これが動作です

奇妙な.c

double a[500000000];

main() {
}

これを使用してコンパイルすると:

gcc bizarre.c

次に、コンパイラは 4G のメモリを使用し、長い時間がかかります。

配列サイズを 50000000 にすると、コンパイルに必要なメモリと時間が大幅に削減されます。

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

この方法で巨大な配列を作成することはベストプラクティスではないかもしれませんが、何か説明はありますか?

4

1 に答える 1

6

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

于 2012-06-15T04:41:12.060 に答える