2017-03-08 6 views
0

可能な限り多くのテンプレートをexternとして定義し、それらを一度だけインスタンス化することによって、プロジェクトのコンパイル/リンク時間を最適化したいと考えています。オブジェクトファイル内で複製されたテンプレートインスタンスを見つける

私は、どのテンプレートインスタンス化がそれ以上作成されるか知りたいと思っています。

リンカがそのような重複をほとんど捨て去ったという事実のために、リンケージで正確に起こったことに関する情報は非常に有用であると私は考える。

MSVCリンカーには、このような情報が表示されるフラグはありますか?

+1

おそらくリンカーに地図ファイルを生成してそれを見てもらうように頼んでいますか? –

答えて

0

このstack overflow questionは非常によく似ています。彼らの場合、テンプレートメタプログラミングを行うときです。

直接回答はコンパイラによって提供されないと思います。また、数字の数が最良のメトリックではないかもしれません(間違いなく非常に有用です)。 大きなテンプレートクラスは、5行テンプレート関数よりもはるかに時間がかかります。

私の仕事では、コンパイル時間がかなり長いため、これを見てきました。私たちを助けたのは、各ファイル/ライブラリがコンパイルと分析にかかる時間を実際に調べることです。しばしばテンプレートのインスタンス化です。 Windowsでは、特にデバッグ時に、リンクがかなり遅いです。より小さなモジュールを持つことはそれを助けました。 Pimplイディオムとフォワード宣言を使用することで、実装の詳細が変更されたときにコンパイルする必要があるファイルのリプルを減らすことができます。さらに、モジュールはシンボルの数を減らします。

関連する問題