相关疑难解决方法(0)

源代码合并真的能提高 C 或 C++ 程序的性能吗?

代码合并包括将整个源代码复制到一个文件中。

例如,它是由SQLite完成的,以减少编译时间并提高生成的可执行文件的性能。在这里,它会生成一个包含 184K 行代码的文件。

我的问题不是关于编译时间(已经在这个问题中回答),而是关于可执行文件的效率。

SQLite 开发人员说:

除了使 SQLite 更容易合并到其他项目中之外,合并还使其运行速度更快。当代码包含在单个翻译单元中(例如在合并中)时,许多编译器能够对代码进行额外的优化。当我们使用合并来编译 SQLite 而不是单个源文件时,我们测量了 5% 到 10% 的性能改进。这样做的缺点是额外的优化通常采用函数内联的形式,这往往会使生成的二进制图像的大小更大。

据我了解,这是由于过程间优化(IPO),编译器进行的优化。

GCC开发人员也这么说(感谢 @nwp 提供链接):

编译器根据它对程序的了解来执行优化。一次将多个文件编译为单个输出文件模式允许编译器在编译每个文件时使用从所有文件中获得的信息。

但是他们并没有谈论最终的收益。

除了 SQLite 的测量之外,是否有任何测量可以证实或反驳以下说法:使用 gcc 编译时,带有合并的 IPO 比不带合并的IPO 生成更快的可执行文件?

作为一个附带问题,对于此优化,进行代码合并或将所有 .cpp(或 .c)文件#include 到一个文件中是否相同?

c c++ gcc compiler-optimization

6
推荐指数
1
解决办法
1881
查看次数

标签 统计

c ×1

c++ ×1

compiler-optimization ×1

gcc ×1