18

gcc でコンパイル時間が遅くなる原因となるコードを特定したいと考えています。以前、コードのコンパイルに時間がかかっていたのですが、gcc がコンパイルする各ステップ (各関数/変数/シンボルなど) を出力するコマンドライン スイッチについて誰かが教えてくれました。それは大いに役立ちました (コンソールで gcc がチョークする場所を文字通り見ることができました) が、スイッチが何であるかを忘れていました。

4

3 に答える 3

27

私はそれを見つけました(gccのmanページから):

-Q

コンパイル時に各関数名をコンパイラに出力させ、終了時に各パスに関する統計を出力させます。

于 2012-12-14T13:18:56.697 に答える
5

よく似た質問に対するこの回答も参照してください。

おそらく、GCC コンパイラの各内部フェーズまたはパスに費やされた時間を示すor ... ( orコマンドによって開始された適切なコンパイラ)によって費やされた時間を与えるまたはでGCCを呼び出したいと思うでしょう。最適化、デバッグ、および警告フラグ (例: ) も忘れないでください。それらはすべてコンパイルを遅くします。-time-ftime-reportcc1cc1plusgccg++-Wall -O -g

C プログラムの場合、最適化を要求するとすぐに、構文解析はコンパイル時間のごく一部であることがわかり-O1ます-O2。(特に、テンプレートの展開が解析と見なされるため、解析に半分の時間がかかる可能性がある C++ の場合、これはあまり当てはまりません)。

経験的に、GCC を遅くするのは非常に長い関数本体です。50000 行の 1 つの関数よりも、それぞれ 1000 行の 50 個の関数を使用する方がよい (これは、C++ コードの一部を生成するプログラムで発生する可能性がある (たとえば、 RefPerSysや、2021 年春には Bismonなど)。

于 2012-12-14T13:35:26.347 に答える
0

-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

于 2012-12-14T13:10:06.563 に答える