总是在不同的 .so 中内联函数
always inline functions in different .so
在 Linux 中,使用gcc
如果我将动态库中的函数声明为__attribute__((always_inline))
,然后动态加载该库,该函数是否会由动态链接器内联?
我正在编译动态库,-O3
并且没有传递任何链接时间优化标志-flto
真正的问题是:当大多数时候从另一个库调用函数时,是否值得在动态库中始终内联声明函数?
glibc 动态链接器不会内联在其加载的对象中找到的任何函数。
但是,如果在头文件中声明并定义always_inline
函数,编译器将内联该函数,即使 DSO 中有实现也是如此。 这有两个后果:
-
您可以获得内联的速度优势。
-
函数定义中的所有信息都已编译到调用方中,因此可能无法再用不同的实现替换 DSO。
换句话说,它可能更快一些,但提供 ABI 兼容性突然变得更加困难。
因此,这是否值得这样做实际上取决于性能需求以及您期望的库未来发生什么样的变化。
相关文章:
- 无法从 SO 文件调用 SO 文件的函数 - C++生成文件
- C++ .so 文件中的模板化函数
- 总是在不同的 .so 中内联函数
- 从 C 调用共享 .so 中的函数
- 为什么在 SO SIUTATION 中无法访问基类的成员函数?
- 有没有办法在 UBUNTU 中的大型库文件夹(.a 和 .so 文件)中搜索函数
- 当*.so使用其他*.so中的函数时,如何使用dlopen和dlsym
- 为什么我不能使用.so库中声明的函数
- 如何确定在哪个.SO库中给定了C函数
- so文件:从另一个so文件调用的函数
- 如何从linux SO库中仅导出某些函数
- Linux 查找 glxext.h 函数的对象 -> 找不到正确的 .so -> "undefined reference"
- Java - 我有一个库(.a/.so)和header(.h),如何使用Java调用它们的函数?
- 使用Android NDK从.so文件调用Native函数
- 如何使用php脚本从.so文件调用函数
- 使用JNA从java中的源对象(.so)文件内部调用C++函数时发生链接异常
- 在c++程序中如何调用动态库中c++类的构造函数(.so)
- 如何使用dlopen()和dlsym()调用.so文件中的函数
- 如何查看Linux .so或.a对象的内部并查看它们包含哪些函数
- 如何避免在从.so调用抛出异常的函数时崩溃