总是内联函数在不同的.so

时间:2017-07-25 08:55:27

标签: c++ gcc dll shared-libraries link-time-optimization

在Linux中,如果我将动态库中的函数声明为gcc,然后我动态加载该库,那么使用__attribute__((always_inline))是否会由动态链接器内联函数?

我正在-O3编译动态库,而不传递任何链接时优化标志-flto

真正的问题是:当一个函数在动态库中始终内联时是否值得声明,当它从大多数时间从另一个库中调用时?

1 个答案:

答案 0 :(得分:4)

glibc动态链接器不会内联它加载的对象中的任何函数。

但是,如果在头文件中声明并定义 always_inline函数,编译器将内联该函数,即使有一个实现一个DSO。这有两个后果:

  • 您可以获得内联的速度优势。

  • 函数定义中的所有信息都已编译为调用者,因此可能无法再使用不同的实现替换DSO。

换句话说,它可能会快一点,但提供ABI兼容性突然变得更加困难。

因此,这是否值得做真的取决于性能需求以及您期望的库的未来变化。