跟踪 gcc 编译以及哪些代码减慢了它的速度
Posted
技术标签:
【中文标题】跟踪 gcc 编译以及哪些代码减慢了它的速度【英文标题】:Trace gcc compilation and what code slows it down 【发布时间】:2012-12-14 13:07:15 【问题描述】:我想找出导致 gcc 编译时间变慢的代码。我以前有一个代码编译得很慢,有人告诉我命令行开关让 gcc 打印它编译的每个步骤,包括每个函数/变量/符号等。这很有帮助(我可以在控制台中看到 gcc 阻塞的地方),但我忘记了开关是什么。
【问题讨论】:
注意:对于一般的迟缓,也值得ptrace
调用(例如,一长串-I
指令可能会导致头文件查找时间过长)。跨度>
好的,谢谢。但是对于这种情况,我只需要测量预处理编译(因为 distcc 与预编译头一起使用)。
【参考方案1】:
我找到了(来自gcc man page):
-Q
使编译器在编译时打印出每个函数名称,并在完成时打印关于每个传递的一些统计信息。
【讨论】:
很高兴知道,感谢分享。我不知道那个开关。【参考方案2】:另请参阅this answer 来回答一个非常相似的问题。
你很可能想要invoke GCC 和-time
或更可能是-ftime-report
这给了你cc1
或cc1plus
所花费的时间......(编译器由gcc
或@ 启动987654330@command),它显示了 GCC 编译器的每个内部阶段或传递所花费的时间。不要忘记优化、调试和警告标志(例如-Wall -O -g
);它们都会减慢编译速度。
您将了解到,对于 C 程序,解析只是编译时间的一小部分,只要您要求进行一些优化,例如-O1
或 -O2
。 (这对于 C++ 来说不太正确,因为解析可能需要一半的时间,特别是因为模板扩展被认为是解析)。
根据经验,减慢 GCC 的是非常长的函数体。最好有 50 个 1000 行的函数,而不是 50000 行的单个函数(这可能发生在程序中生成他们的一些 C++ 代码,例如RefPerSys 或者可能在 2021 年春季-Bismon )。
【讨论】:
在我们的 c++ 代码中,解析是 50-60% 的时间(由 -ftime-report 报告)。 因此我的评论“不太适用于 C++”【参考方案3】:尝试 -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
【讨论】:
不,它只打印每个被调用的程序,而不是它解析的每个符号。以上是关于跟踪 gcc 编译以及哪些代码减慢了它的速度的主要内容,如果未能解决你的问题,请参考以下文章