gcc でコンパイル時間が遅くなる原因となるコードを特定したいと考えています。以前、コードのコンパイルに時間がかかっていたのですが、gcc がコンパイルする各ステップ (各関数/変数/シンボルなど) を出力するコマンドライン スイッチについて誰かが教えてくれました。それは大いに役立ちました (コンソールで gcc がチョークする場所を文字通り見ることができました) が、スイッチが何であるかを忘れていました。
3 に答える
私はそれを見つけました(gccのmanページから):
-Q
コンパイル時に各関数名をコンパイラに出力させ、終了時に各パスに関する統計を出力させます。
よく似た質問に対するこの回答も参照してください。
おそらく、GCC コンパイラの各内部フェーズまたはパスに費やされた時間を示すor ... ( orコマンドによって開始された適切なコンパイラ)によって費やされた時間を与えるまたはでGCCを呼び出したいと思うでしょう。最適化、デバッグ、および警告フラグ (例: ) も忘れないでください。それらはすべてコンパイルを遅くします。-time
-ftime-report
cc1
cc1plus
gcc
g++
-Wall -O -g
C プログラムの場合、最適化を要求するとすぐに、構文解析はコンパイル時間のごく一部であることがわかり-O1
ます-O2
。(特に、テンプレートの展開が解析と見なされるため、解析に半分の時間がかかる可能性がある C++ の場合、これはあまり当てはまりません)。
経験的に、GCC を遅くするのは非常に長い関数本体です。50000 行の 1 つの関数よりも、それぞれ 1000 行の 50 個の関数を使用する方がよい (これは、C++ コードの一部を生成するプログラムで発生する可能性がある (たとえば、 RefPerSysや、2021 年春には Bismonなど)。
-v (冗長) コンパイルを試してください。
このリンクを参照してください:
http://www.network-theory.co.uk/docs/gccintro/gccintro_75.html
編集:
理解します。たぶんこれが役立ちます:
gcc -fdump-tree-all -fdump-rtl-all
など (-fdump-passes)。ここを参照してください: http://fizz.phys.dal.ca/~jordan/gcc-4.0.1/gcc/Debugging-Options.html