程序在内存和静态/共享库中的位置

时间:2012-04-11 16:35:06

标签: c caching memory shared-libraries static-libraries

当我运行一个程序(在linux中)它是否全部加载到物理内存中?如果是这样,使用共享库而不是静态库,在缓存方面有帮助吗?一般来说,什么时候应该使用共享库?什么时候应该使用静态库?如果重要的话,我的代码用C或C ++编写。

2 个答案:

答案 0 :(得分:3)

这{{}}}次点击可以为你想要的东西提供一些体面的基础。这个article更深入地了解了共享库的优势

SO也深入讨论了这个话题

article

Difference between static and shared libraries?

几乎所有上述文章都是共享库偏向的。维基百科试图拯救静态库:)

来自When to use dynamic vs. static libraries

  

将库与静态链接有几个优点   可执行而不是动态链接它们。最重要的   应用程序可以确定它的所有库都是   目前,他们是正确的版本。这避免了依赖性   问题。通常,静态链接会产生重大影响   性能改进。

     

静态链接也可以允许应用程序   包含在单个可执行文件中,简化了分发   和安装。

     

使用静态链接,包含这些内容就足够了   直接和间接引用的库的部分   目标可执行文件(或目标库)。

     

使用动态库,   整个库被加载,因为事先不知道哪个   函数将由应用程序调用。这是否优势   实践中的重要性取决于图书馆的结构。

答案 1 :(得分:1)

当您拥有可以在不同程序中使用和“共享”的功能时,主要使用共享库。在这种情况下,您将只有一个点,所有程序将获得他们的方法。但是,这会产生依赖性问题,因为现在编译的程序依赖于该库的特定版本。

静态库主要用于您不希望出现依赖性问题且不希望程序关注目标系统上安装了哪些X或Y库的情况。

那么,哪一个使用?为此你应该回答以下问题:

  1. 您的程序是否可以在不同平台或Linux发行版上使用? (例如Red Hat,Debian,SLES11-SP1)
  2. 您是否复制了不同二进制文件正在使用的代码?
  3. 您是否预计将来其他计划可以从您的工作中受益?
  4. 我认为这是一个案例决定,并不是一个适合所有类型的答案。