哪个更推荐:使用静态库还是动态库(共享对象)?

4
我正在使用Linux上的一个应用程序。它支持静态和动态(.so)版本。
从性能角度来看,用户应该使用哪个版本?该应用程序执行需要数小时的CPU时间的计算任务。
使用一种库而不是另一种库还有其他优点吗?
谢谢

还可以查看相关问题: https://dev59.com/iEvSa4cB1Zd3GeqPcjMT - sateesh
4个回答

4

从性能角度来看:

共享对象编译为PIC(位置无关代码),在某些体系结构(包括x86)上理论上可能比普通代码略微效率低下。

但是,我认为这不会造成任何真正的差异。

从其他任何角度来看

使用共享对象,它比静态库具有太多优点,是更好的选择。


3

就性能而言,除非动态库经常被加载和卸载,否则差异微小。

唯一的区别是动态库在需要时加载,而不是内置到可执行文件中(因此始终存在,无需加载时间)。

动态库也可以被多个可执行文件重复使用。这是我过去使用动态库的主要原因。


2

通常情况下,您会使用动态库来减小二进制文件的大小。在运行时没有任何惩罚,除了应用程序启动时可能不重要。


2
动态库还有另一个优点:它们允许您更改函数(即应用程序修复)而无需重新编译所有使用此函数的程序。 - user253984

1
通常情况下,静态绑定库更快,因为它们没有查找和加载库的开销。但对于运行多小时的程序而言,性能差异应该太小以至于不会被注意到。
无论如何,要确保真正的效果,唯一的方法是:自己进行基准测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接