13

コンパイラがどこで時間を費やしているかを知るにはどうすればよいですか?

ビルドが遅すぎます。既に VC++ 一時ファイル用に RAM ディスクを使用していますが、違いはありません。(私はSSDを持っているので、違いはないと思っていました。)

このプロジェクトの単一の C++ ファイルのほとんどは、約 1 秒かかります。コンパイルに2秒かかるのはひどいようです(VS2005を使用しているため、プロジェクト内の並列化も行っていません)。

これを最適化するにはどうすればよいですか?プロファイリングせずに最適化しないでください。コンパイラーをプロファイリングするにはどうすればよいですか?

注: これらはあまり役に立ちませんでした:


良いコメントを追加しましょう:テンプレートはたくさんありますか? ファイルの平均サイズはどれくらいですか? 必要最小限のヘッダーのみを含めることを確認しましたか

いいえ、しませんでした。もちろんできます(そして、きっとそうするでしょう)。何かを見つけられるかもしれませんが、それはすべて憶測試行錯誤です!

「みんな」は、測定/プロファイリングの後にのみ最適化する必要があることを示していますが、コンパイル時間を最適化すると、試行錯誤に戻りますか?


注:コメントから提案された「ハック」は、少なくともVisual-C ++では機能し__TIME__ません。これは、(ドキュメントの状態として):現在のソースファイルの最新のコンパイル時間。時刻は、hh:mm:ss 形式の文字列リテラルです。-- このスタンプを使用して、少なくとも単一のコンパイル ユニットのタイミングを取得できると思いますが、コンパイル ユニットにドリルダウンすることは役に立ちません。

4

3 に答える 3

2

コンパイル時間を最適化するには、いくつかの方法があります。

  • プリコンパイル済みヘッダーを使用します。Visual C++ を使用する場合は、「stdafx.h」を使用してください。デフォルトでは、「stdafx.h」がプリコンパイル済みヘッダーに設定されていますが、これを確認して確認することをお勧めします。

  • Linuxを使用してください:)。あなたがやっていることのために Windows を使う必要がないなら、Linux を使うことをお勧めします。そのコンパイル時間ははるかに優れています。理由のいくつかは次のとおりです。ext4 は平均で NTFS よりも最大 40% 高速であり、プロセス スケジューラが優れています。プロセッサの操作に関しては、Linux は通常 ~x1.8 から x2 倍高速であり、コンパイルはプロセッサに依存します。

  • 別のコンパイラを使用してください。Clang/LLVM はコンパイル速度が速いことが知られており、プリコンパイル済みヘッダーもサポートしています。

于 2013-03-14T10:47:18.670 に答える
2

SysInternals ProcMon は、選択したプロセスによって実行されたすべての I/O を、発生時のタイムスタンプとフル パスを含めて表示します。

于 2013-03-14T10:16:22.040 に答える