18

我想找出哪些代码导致 gcc 编译时间变慢。我以前有一个代码编译得很慢,有人告诉我命令行开关让 gcc 打印它编译的每个步骤,包括每个函数/变量/符号等。这很有帮助(我可以在控制台中看到 gcc 阻塞的地方),但我忘记了开关是什么。

4

3 回答 3

27

我找到了它(来自gcc 手册页):

-Q

使编译器在编译时打印出每个函数名称,并在完成时打印有关每次传递的一些统计信息。

于 2012-12-14T13:18:56.697 回答
5

另请参阅this answer到一个非常相似的问题。

您很可能希望调用 GCC-time或更多可能-ftime-report会为您提供由or cc1... (由or命令cc1plus启动的编译器)花费的时间,它显示在每个内部阶段或 GCC 编译器的传递中花费的时间。不要忘记优化、调试和警告标志(例如);它们都会减慢编译速度。gccg++-Wall -O -g

您将了解到,对于 C 程序,解析只是编译时间的一小部分,只要您要求进行一些优化,例如-O1-O2. (这对于 C++ 来说不太正确,因为解析可能需要一半的时间,特别是因为模板扩展被认为是解析)。

根据经验,减慢 GCC 的是非常长的函数体。最好有 50 个 1000 行的函数,而不是一个 50000 行的函数(这可能发生在生成一些 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 回答