动态链接库与静态链接库的区别

静态链接库

静态链接库是将整个库文件都与目标程序链接在一起,整合到一个可执行文件中。

动态链接库

动态链接库与静态链接库相反,在可执行文件中,只记录了库文件的一些信息(位置啊,函数名什么的……瞎猜的),在需要的时候有OS进行调用。

另外动态链接还分为载入时链接,与运行时链接。
载入时链接是在程序载入时,将整个库文件同时载入,而运行时链接是在程序运行时发现这段函数程序未在内存中而由OS载入。
可以理解成运行时链接是动态的动态。

区别与比较

一点小区别:
静态链接库不能引用其他库文件,而动态链接库则可以。

以下讨论两者优劣势力,只谈优势,因为动态链接库的优势就是静态链接库的劣势,反之亦然。

动态链接库优势:

  1. 这种链接方式,使得所有需要这个库文件的文件共享一个库文件在内存上的拷贝,与静态链接相比,可以减少内存的消耗。这对频繁调用的函数来说十分有利。
  2. 维护性增强。只要保持接口不变,在修改库文件之后,只需要编译库文件即可,而静态链接库则需要重新编译整个文件。这对大项目来说,是不划算的。
  3. 减小文件的大小,提高载入速度。不解释。

静态链接库优势:

  1. 快!当然这是相对于动态链接来说的,因为动态可能需要频繁地将库文件或者是库文件的一部分换入换出,这在总时间上会有一定的消耗。
  2. 打包简单……
  3. 避开动态链接库因为多个应用程序用到同一个库文件的互斥版本而造成的DLL Hell。

其他

时至今日,貌似在服务器的程序使用的大都是静态链接库(出于稳定考虑?)再加上内存加大,静态链接库的内存大可不必节约吧。