何时基于头的库比静态链接的库更具性能?

时间:2016-05-03 06:43:43

标签: c++ optimization linker g++ ld

编译静态库时,编译器会优化库。当该库与另一个库静态链接以生成生成的可执行文件时,优化链接器将从原始静态库中删除不需要的功能。在执行此操作时,生成的可执行文件随后会进行优化,并且仅包含运行时所需的功能。现在直观地通过将库单独编译为主可执行文件,编译器将具有缩小的优化范围。这只是因为编译器无法在某个时间点访问所有源代码,因此无法在编译时对整个可执行文件进行全局优化。当您使用仅标头库时,预处理器将代码从库中复制到源文件中,然后一次编译。这意味着编译器可能具有更大的优化范围,因为它可以立即看到整个代码,并且可以实现“智能化”。基于整个代码的决定。

所以我的问题是,在什么情况下,生成的二进制文件在仅头文件库和静态链接库中的性能更高?

这个问题当然非常依赖于所讨论的编译器/链接器,所以对于那些回答我最感兴趣的是来自GNU工具链的工具。

注意:对谈论模板或元编程的答案感兴趣,因为无法在静态库和仅标头库之间进行公平的比较。我特别询问编译和链接过程中的优化问题。

0 个答案:

没有答案