プリコンパイル済みヘッダーファイルの最適な候補は何ですか?テンプレートがある場合でも、STLヘッダーとBoostヘッダーをそこに配置できますか?そして、それはコンパイル時間を短縮しますか?また、コンパイル時間を短縮するための最適なIDE設定は何ですか?
4 に答える
簡単な答え:STLヘッダーとBoostヘッダーは、これらのヘッダーファイルがテンプレートクラスを定義している場合でも、実際にはプリコンパイル済みヘッダーファイルに属します。
プリコンパイル済みヘッダーファイルを生成するとき、コンパイラーはヘッダーテキストを解析し(重要なタスクです!)、コンパイラーの利益のために最適化されたバイナリ形式に変換します。
テンプレートクラスは、他の.cppファイルがコンパイルされるときにインスタンス化されますが、プリコンパイル済みヘッダーの情報からインスタンス化されるため、コンパイラーが読み取るのが大幅に高速になります。
(後で追加)
プリコンパイル済みヘッダーに含めてはいけないことの1つは、プロジェクトの一部であり、すべての.CPPファイルにこれらのファイルが含まれている場合でも頻繁に変更されるファイルです。
その理由はこれです-ブースト、stl、およびWindowsライブラリが非常に大きいため、プリコンパイル済みヘッダーの生成には長い時間がかかる可能性があります。
すべてが使用する単純なファイル(「StringDefs.h」など)がある場合があります。StringDefs.hがstdafx.hに含まれていて、1人の開発者がStringDefs.hに触れた場合、すべての開発者は、プリコンパイル済みヘッダー全体が再コンパイルされるまで待機する必要があります。StringDefs.hをプリコンパイル済みヘッダーから除外し、各.CPPファイルと一緒に解析すると、はるかに高速になります。
アンドリューシェパードの答えへの1つの追加。プロジェクトの外部にあるヘッダーファイル、頻繁に変更されないファイルには、プリコンパイル済みヘッダーを使用します。現在のプロジェクトのヘッダーファイルを常に変更している場合は、それらを事前にコンパイルする価値はないでしょう。
とにかく、そのプロジェクトのほとんどの .cpp ファイルに含まれるプリコンパイル済みヘッダーに何かを入れます。これは、実際にはどのヘッダーファイルにも当てはまります。これにより、コンパイラはこれらのファイルを 1 回解析し、同じプロジェクト内のすべての .cpp ファイルでその情報を再利用できます。