静态库和动态库的区别

静态库被链接后库就直接嵌入可执行文件中了,这样就带来了三个问题。

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

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

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

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

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


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

动态库的名字一般是libxxx.so(Linux),有时候也是 libxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值