C++代码编译速度剖析

4
如何获得客观的测量结果来评估C ++项目的物理结构是否有助于编译速度? 有些人说,为了提高编译速度,应避免使用模板,但是如果这些模板生成了大量不冗余的目标代码,则即使每秒钟的编译速度并不快,也不会真正糟糕。 因此,您不能仅通过比较两个项目的每秒钟行数来判断结构是否优秀,而且许多其他因素也可能扭曲结果。
在同一平台和编译器上所生成的每秒对象代码数量是否是一个好的度量标准? 或者是否存在用于此类分析的代码分析工具? 有趣的是,我们可以通过某种客观的测量方式来了解项目的物理结构是否有改进的空间。例如,如果您应该尝试进一步优化头文件依赖关系,或将更多代码组合到cpp文件中(类似于统一构建),将更多内容从头文件移至cpp文件等。

我想知道 - 是否有使用不同方法解决问题的代码存储库?例如,使用模板解决复杂问题 vs. 使用 #define 解决问题... - Drew Dormann
1
我认为没有真正的测试就无法获得任何见解。进行基准测试,这可能会有所帮助:https://dev59.com/_XE85IYBdhLWcg3w64IA - usr1234567
1
单纯的基准测试并不足够,因为你必须能够以某种方式与其他项目进行比较,了解你的项目表现如何。不过这个链接很好,可以获得不同阶段编译性能的详细信息。 - JarkkoL
2
很不幸,事情并不像那么简单。当编译和链接时间缩短时,可以节省程序员的时间。这并不是使用模板与否的问题。更多的是要知道是否有改进的空间来缩短编译时间。 - JarkkoL
1
@WarrenDew 是的,它并不完美。也许我可以通过运行生成的目标代码通过某些检查目标代码中重复序列的工具来偏向结果(只是头脑风暴)。实际上,一些像zip中使用的熵编码器就可以做到这一点。 - JarkkoL
显示剩余6条评论
1个回答

0

我会考虑计算实例化。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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接