纹的C ++编译过程(Profiling the C++ compilation process)

2019-06-21 06:51发布

我倾向于写相当大的模板仅标头的C ++库和我的用户经常抱怨编译时间。 想着这件事之后,它发生,我认为我不知道在哪里的时候是怎么回事 。 有一些简单的方法来确定与通用的编译器,如G ++,ICC和方xIC C ++的编译过程? 举例来说,是有可能得到的内花费了多少时间的想法每个C ++编译的阶段 ?

Answer 1:

对于GCC有调试选项,找到how much time is spent within each of the phases of C++ compilation?

-Q使编译器打印出每个函数的名称,因为它被编译,并打印关于每遍了一些统计数据,当它完成。

-ftime报告使编译器打印有关每遍消耗当它完成的时候的一些统计数据。

通行证中描述的编译器的Passes和相关文件:GCCINT 9 。

您可以张贴的G ++单源文件的编译输出-v -ftime-report在这里讨论这个问题 。 有可能是GCC的一些帮助的邮件列表 。


对于除GCC(海湾合作委员会或比更古老 其它编译器3.3.6 )看到这个线程的其他选项。



Answer 2:

一个工具来自Boost的项目,这可能是几乎任何有用的编译器和构建系统。

该工具需要与源代码插 TEMPLATE_PROFILE_ENTER()TEMPLATE_PROFILE_EXIT()的宏调用。 这些宏然后生成特定的诊断(警告)在编译时,这是定时的,用实例调用栈(这因此允许建设和沿收集可视化调用图)通过一个脚本。 不坏,IMO。

我没有用,虽然它尚未。



Answer 3:

我还没有尝试过,但templight看起来非常有前途: https://github.com/mikael-s-persson/templight



Answer 4:

你可以从他们分开在一定程度上(我假设make

  • 添加生成规则,只有预处理文件(使用-E开关),以及.PHONY依赖于预处理器的输出文件,就像正常的二进制目标取决于目标.o文件。 衡量它需要多长时间来建立这个目标
  • 添加一个'PHONY依赖于所有目标.o文件,但不将它们链接。 衡量它需要多长时间来建立这个目标(自洁)
  • 测量需要多长时间做一个干净的构建通常二进制

现在你有一些想法需要多长时间进行预处理,编译和链接。 您还可以比较优化和非优化( -O0第二和第三目标的)版本,看看多久优化花费。



Answer 5:

你也许能够得到一些牵引着一些变种strace -e trace=process -f -r -ttt -T ,至少对于如g ++编译器被分成许多过程。



文章来源: Profiling the C++ compilation process