1

私はboost::accumulatorsとEigen線形代数ライブラリを利用するテンプレートアルゴリズムを書いています。コンパイル中、ビジュアルスタジオコンパイラ(cl.exe)、メモリ消費量は2.5GBを超えるRAMでピークに達し、私のPC(Windows 732ビットと3GBの仮想アドレス空間)が応答しなくなります(非常に長い時間:約1分) 。これらのコンパイルユニットのバイナリファイル(.obj)は10〜20MBです。

私の質問(これらの特定のライブラリには向けられていません)

  1. テンプレートを多用するコードのこれは正常な動作ですか?
  2. メモリ需要とコンパイル時間を削減するためにできることはありますか?
  3. 問題に対する適切な解決策がない場合、プログラミング言語を設計する人々がこれに対処しないのはなぜですか?C ++を理解する人が増えるほど、テンプレートを使用し、コンパイルが難しいコードや肥大化したバイナリを生成する可能性が高くなります。
4

2 に答える 2

5

問題に対する適切な解決策がない場合、プログラミング言語を設計する人々がこれに対処しないのはなぜですか?

良い解決策がないので、終止符

あなたが話している問題はC++とは何の関係もありません。これは、C-古い「翻訳ユニット」からのアーティファクトです。この問題を修正するには、コンパイルモデルをやり直す必要があります。C ++委員会は、既存のC ++のすべての行を壊すことなくこれを実現するために何年も努力してきました(これはより大きな考慮事項です)が、それは些細な問題ではありません。それを修正するには、大幅な変更が必要になります。

また、Clangのパフォーマンスははるかに優れており可変個引数テンプレートを備えた新しいバージョンのGCCでも同様に実行できます。

于 2012-07-01T14:14:18.457 に答える
3
  1. はい。テンプレートのコンパイルはメモリを消費します。一部の実装は他の実装よりも吸う。私の個人的な経験では、GCC、MSVC、およびClangのうち、後者がメモリ使用量の管理に最適です。

  2. 巨大なソースファイルをいくつかの小さなファイルに分割できます。これにより、いくつかのコンパイル手順で負荷が均等になります。

  3. プログラミング言語を設計した人々は、コンパイラーの作成者に卓越して競争するのに十分な自由を与えるために、実装をほとんど気にしませんでした。または吸う。

于 2012-07-01T14:14:47.467 に答える