剖析 C++ 代码编译速度

Posted

技术标签:

【中文标题】剖析 C++ 代码编译速度【英文标题】:Profiling C++ code compilation speed 【发布时间】:2014-06-28 20:21:18 【问题描述】:

如果 C++ 项目的物理结构有利于编译速度,您将如何获得某种客观的测量结果?有人说您应该避免使用模板以获得更好的编译速度,但是如果模板生成大量非冗余目标代码,即使行/秒编译速度不是很好,那也不是很糟糕。因此,您无法真正检查两个项目之间的行数/秒,以了解结构是否良好,再加上许多其他因素可能会扭曲结果。

每秒生成的目标代码量是否是一个很好的衡量标准(显然在相同的平台和编译器上)?或者有一些代码分析工具吗?对物理结构进行某种客观测量以了解是否有改进的余地会很有趣。例如。如果您应该尝试进一步优化头文件依赖关系或将更多代码分组到 cpp 文件(ala unity builds),将更多内容从头文件移动到 cpp 等。

【问题讨论】:

我本能地认为这个问题因其广泛性而脱离主题,因此可能会被关闭,但这是一个非常好的问题。 我认为如果没有真正的测试,您将无法获得任何见解。对其进行基准测试,这可能会有所帮助:***.com/questions/2542273/… @usr1234567 仅进行基准测试是不够的,因为您必须能够以某种方式与其他项目进行比较,您的项目是如何执行的。很好的链接,但可以在不同阶段获得编译性能的细分。 不幸的是,事情没有那么简单。当编译和链接时间减少时,它可以节省程序员的时间。这实际上不是使用模板的问题。更重要的是了解是否需要改进以缩短编译时间。 @WarrenDew 是的,它并不完美。也许我可以通过检查目标代码中的重复序列以使结果产生偏差(只是头脑风暴)的东西来运行生成的目标代码。实际上,像 zip 中使用的一些熵编码器可以做到这一点 【参考方案1】:

我会考虑计算实例化。有一个用于 boost 的模板分析器工具可以做到这一点:

https://svn.boost.org/svn/boost/sandbox/tools/profile_templates/

如果您使用的是 Visual Studio 2010 或更高版本,那么您也许可以使用一个名为 Meta 的扩展,它可以处理调用 boost profiler 工具的一些复杂性。

这是 Visual Studio 2010 扩展的链接。 http://visualstudiogallery.msdn.microsoft.com/325d7305-2787-4b1d-9ac7-743e3d767531

这里是 vs 2013 版本的源代码: https://github.com/brandon-kohn/Meta

【讨论】:

以上是关于剖析 C++ 代码编译速度的主要内容,如果未能解决你的问题,请参考以下文章

在编译c++代码时出现如下错误: 望速度解答,很急。。谢谢!

使用 MKL 编译时,Eigen C++ 运行速度较慢

掌握这个小技巧,让你的 C++ 编译速度提升 50 倍!

掌握这个小技巧,让你的 C++ 编译速度提升 50 倍。

在 PInvoke 中管理大量 3rdparty 依赖项以提高编译速度

Python绑定;调用 C 代码和性能