动态库和静态库

库:
提前写好的一些函数的集合,是一种二进制文件,虽然是二进制文件但是不能独立运行。

动态库:又叫共享库
动态库是一种可执行文件,文件后缀为.DLL(windows)或者 .so(linux),动态库存放在系统某个特定的位置,所有进程都可以共享或者引用这一份代码中的内容。

实际上,每个程序运行起来,在它的虚拟地址空间上栈的附近有一部分是分配给共享库的。
(参照前面的文章,程序的编译链接过程)
动态库的特点
1.存放在系统特定位置,每个程序都可以引用,不论多少程序引用内存中只会存在该动态库指令的一份拷贝,是代码共享的一种方式;
2.在程序运行的时候才会去引用库中的相关函数,并不把这些函数的指令包含进去;
3.你可以这样认为:动态库就像是一个“仓库”,里面包含函数、变量和类等,你可以直接拿来用,不需要将这些指令包含在自己的可执行程序中,需要什么拿什么,所有进程都可以共同使用。

动态库的优缺点:
优点:
1.里面包含了大量程序运行需要的函数等,不需要开发者重复的开发相同功能的代码,起到代码复用的作用;
2.由于是运行时才对 相应的函数指令进行引用,最终并不把指令包含着可执行文件中,使得最终生成的可执行文件会比较小;
3.如果需要更新程序,只需要运行时将动态库重新引用即可;
4.多个进程引用该动态库,只需将其将在到内存中即可,并且只加载依次,只存在该库的一份拷贝,节省内存。

缺点:
跨平台能力差,对动态库的依赖太大,不够灵活,不同平台对应的动态库有一定的差异,即有可能出现不适用等情况;

静态库:
实际上也是种代码复用的方式,和共享库不同的是,用户在包含静态库的时候,不论使用到几个函数、几个变量、或者几个类,它都会自动将静态库的全部内容包含到自己的代码中,和包含它的源文件一起进行编译,最终和其他的目标文件链接成可执行文件。后缀名以.a(linux)和.lib(windows)结尾

静态库的优缺点:
缺点:

1.如果多个程序包含了同一个静态库,那么内存中会有多份静态库的内存拷贝,占用内存较大;
2.如果一个程序只用到了静态库的一个函数或者一个变量,但它还需要将这个库所有其他的指令包含进来,最终使得可执行程序体积庞大;
3.后期更新会比较繁琐,代价较大。

优点:
移植性较好,如果到了即使没有该静态库的平台,依然可以运行,因为已经完全包含进去了。

静态库和动态库的比较:

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值