g++のコンパイル時間を高速化する方法(テンプレートを多用する場合)
2023-11-14 08:24:29
質問
この質問はおそらく奇妙なものですが、どのようにしたら g++ のコンパイル時間を短縮できるでしょうか。私の C++ コードは、boost とテンプレートを多用しています。私はすでにヘッダーファイルから可能な限り移動し、-j オプションを使用していますが、それでもコンパイル (およびリンク) にかなりの時間がかかります。
私のコードを分析し、コンパイラのボトルネックを指摘するようなツールはあるのでしょうか?あるいは、私のコード上で実行されているコンパイラーを何らかの方法でプロファイルすることは可能でしょうか。時々、私はコンパイラー コンソールのログを見つめることにあまりにも多くの時間を費やしてしまったという印象を持つので、これは本当に素晴らしいことです。
どのように解決するのですか?
一番役に立ったこと。
- RAM ファイルシステム上で構築する。 これは Linux では些細なことです。 一般的なヘッダーファイルのコピー (プリコンパイルまたは実際の .h ファイル) を RAM ファイルシステム上に置いておくとよいでしょう。
- プリコンパイルされたヘッダ . 主要な)ライブラリ(Boost, Qt, stdlibなど)ごとに1つずつ持っています。
- 可能な限り、クラスをインクルードする代わりに宣言します。 これは依存関係を減らすので、ヘッダーファイルを変更したときに再コンパイルする必要があるファイルの数を減らすことができます。
-
makeの並列化
. これは通常ケースバイケースで役に立ちますが、私の場合は
-j3
をグローバルに make しています。 ただし、Makefileで依存関係のグラフが正しいことを確認しないと、問題が発生する可能性があります。 -
使用方法
-O0
は、実行速度やコードサイズをテストしていない場合(そして、コンピュータが十分に速く、パフォーマンスへの影響(おそらく小さい)をあまり気にしない場合)には、使用します。 - 保存するたびにコンパイルします。 これを好まない人もいますが、エラーを早期に確認することができ、バックグラウンドで実行できるため、書き終えてテストの準備ができたときに待たなければならない時間を短縮することができます。
関連
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み】C++で関数の実行時間を測定する
-
[解決済み] std::function vs テンプレート
-
[解決済み] 編集したくないサードパーティのコードで、gccから出る未使用の変数の警告を無効にするにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] マルチコアを使用したg++でのコンパイル