c++ - 链接时间优化与。项目内联;每种方法的局限性

标签 c++ optimization compiler-optimization

<分区>

通常人们在用 C++ 设计适当的软件架构时也需要有很好的性能,进入过早优化的危险游戏,而不是在架构级别进行优化(这是一种非常好的和鼓励的过早优化形式) 他们在代码级别做出妥协,比如完全避免虚拟方法和接口(interface)、低级别的 hack 等。

有些人通过一种通常称为应用程序内联统一构建的做法来避免这种情况,这基本上是生成一个或两个非常大的.cpp,其中包含所有 header 和.cpp从包含的整个项目中,然后将其编译为单个翻译单元。当涉及到内联虚拟方法(去虚拟化)时,这种方法非常可靠,因为编译器确实拥有进行所需优化的一切

问题对于链接时优化等更“优雅和现代”的方法,这种方法有什么缺点?

最佳答案

该方法的技术名称接近次要流行语状态,是 unity build

例如:

The benefits / disadvantages of unity builds?

这里最好地描述了缺点:

http://leewinder.co.uk/blog/?p=394

简而言之,它或多或少是一种语言选择:您可以使用 regular-C++ 或 Unified-build-C++ 编写。编写几乎任何代码的“正确”方式在两者之间是不同的。

关于c++ - 链接时间优化与。项目内联;每种方法的局限性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6700295/

相关文章:

c++ - (int) ch 与 int(ch) : Are they different syntaxes for the same thing?

c++ - 加工和管道

c - C 中的内联实际上是如何减慢该程序的速度的?

optimization - 我应该在 sitemap.xml 中包含分页结果吗?

assembly - 向x86-64 ABI的指针添加32位偏移时是否需要符号或零扩展?

C++:如果缺少函数返回语句,for-loop 被优化为无限循环 - 编译器错误?

c++ - 错误 C2440 : '=' : cannot convert from 'bool' to 'bool *'

c++ - 如何停止 std::set 排序?

mysql - 如何使分组优化?

c - 点积 - SSE2 与 BLAS