2016-09-25 11 views
4

コンパイラは、膨大な量のソースコードをコンパイルすることができます。この巨大なコードは、コンパイル時にASTで翻訳されます。 コードが巨大であれば、このASTも大きくなると思います。コンパイラはどのようにメモリフットプリントを管理しますか?

ASTを構築してメモリに保存することで、最新のコンピュータでコンパイラがメモリ不足になることはないと思いますか?

+2

ほとんどのソースファイルは小さいです。 – melpomene

+0

リンカーは大量のメモリを必要としません。コンパイラは行いますが、パスに分割することができます。 – EJP

+0

@melpomeneあなたは驚くでしょう。私は、コンパイルされた行数を出力するコンパイラ(Watcom)を使用していましたが、.cまたは.cppファイルでは通常数百、.h/.hppファイルでは数千になりました。 – EJP

答えて

1

仮想メモリでは、コンパイラ/リンカーツールは実際にはメモリフットプリントについてあまり心配する必要はありません。

ツールは必要なものを要求し、OSは仮想メモリとしてプロセスアドレス空間に十分な量を提供するか、特定のマシンのポリシー決定によってOSはツールの要求を拒否してプロセスにエラーが発生し、通常は終了します。

巨大なVMの制限があり、それをサポートするのに十分な物理メモリがないシステムがあるかもしれません。その後、ツールは成功するか、オペレータが嫌になるまでページスラッシュを行います。

[私たちはしばしば数百万行のモノリシックプログラムをコンパイルするために独自のコンパイラを使用しています。コンパイラは通常、数百MBのVMがそのプログラムを処理することを望んでいます。これはほとんどの最新のPCで簡単に提供されています。]

0

コンパイラのメモリ要件は、通常、入力サイズとともに増加することは事実です。

コンパイラは、メモリ要件が入力サイズに依存する他のプログラムと変わりありません。十分であると想定し、それ以外の場合は正常に終了します。

あまりにも簡単ですか?まあ、あなたは数学と戦うことはできません。メモリが本当に必要な場合は、十分なものか、運が足りないものがあります。それは簡単です。

関連する問題