您的位置:首页 > 其它

静态库和动态库的区别

2016-06-05 22:36 169 查看
静态库被链接后库就直接嵌入可执行文件中了,这样就带来了三个问题。

(1)磁盘空间被浪费了。想象一下,如果多个程序链接了同一个静态库,则每一个生成的可执行文件就都会有一个库的副本,必然会浪费系统空间。

(2)内存空间也被浪费了。当多个链接了同一个静态库的程序被加载到内存运行时,会造成不必要的内存浪费,后果可能会导致内存不足而产生频繁的内存换页。

(3)一旦发现了库中有bug,挽救起来就比较麻烦了。必须一一把链接该库的程序找出来,然后重新编译。

动态库的出现正弥补了静态库的以上弊端。因为动态库是在程序运行时被链接的,这是一种时间换空间的做法。磁盘上保留一份动态库的副本,所有链接到动态库的程序则保留一份动态库的信息存根,因此节约了磁盘空间。当程序运行时,把所需的动态库加载到内存中(注意不是整个动态库加载,只是加载需要代码),如果其他程序已经把动态库加载到内存中时,那么该程序则直接从内存中读取,即多个程序共享该动态库,所以又节约了内存。当程序运行时如果发现了bug或要升级也很简单,只要用新的库把原来的替换掉就行了,而不需要重新编译这个程序。

静态库也有自己的优点:编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。

静态库的名字一般是libxxx.a(Linux)

动态库的名字一般是libxxx.so(Linux),有时候也是 libxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: