动态链接一个不会被使用的共享库会影响性能吗?

时间:2017-07-06 22:40:50

标签: python

我有一个C ++程序(实际上它是一个dll),它动态链接到另一个共享库(python dll),这个程序有两次使用。

在A场合,程序将对该动态链接的共享库进行函数调用,而在场合B中,程序不会。

我的问题是,如果我专门为场合B构建程序而不链接到共享库,那么与没有实际使用它的链接共享库的情况相比,我是否会获得性能?

1 个答案:

答案 0 :(得分:1)

它真正依赖于几个因素:什么操作系统,共享库,以及应用程序实际执行的操作。也可能是如何构建共享库。

一般来说,它不是特别大的惩罚,因为共享库是需求加载的并且使用位置无关寻址[PIC](PC相对,类似)。这意味着共享库只有在实际使用时才会加载,并且没有工作"加载库。这是操作系统设计人员和系统架构师非常重视的事情,因为对于许多性能敏感的应用程序(例如编译器或Web服务),设计糟糕的共享库系统会使性能变差。

当然可以在构建共享库时进行配置。至少使用PIC的这一方面,所以如果配置共享库的构建的人/公司想要",它可能配置不当而且比零效果差。

为此,您必须添加共享库所做的任何初始化。精心设计的共享库可以按需提供#34;或者"懒惰"换句话说,初始化并没有做很多初始化,直到实际需要它为止。同样,究竟哪个库的细节 - 包括它在构建时的配置方式 - 可以在这里产生巨大的差异。

在任何特定用例中,唯一可行的方法是使用"来构建"和"没有"额外的共享库,并衡量实际的性能。