跟踪gcc编译和什么代码减慢它

que*_*en3 17 c++ linux gcc

我想找出什么代码导致gcc编译时间慢.我以前有一个代码正在缓慢编译,有人告诉我命令行开关,使gcc打印它编译的每一步,包括每个函数/变量/符号等.这有很大的帮助(我可以在控制台中看到gcc chokes),但我忘记了什么是转换.

que*_*en3 23

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

-Q

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


Bas*_*tch 5

另请参阅this answer to a very similar question。

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

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

从经验上看,减慢 GCC 的原因是很长的函数体。最好有 50 个 1000 行的函数,而不是一个 50000 行的函数(这可能发生在生成一些 C++ 代码的程序中,例如RefPerSys或 - 在 2021 年春季 - Bismon)。


use*_*631 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