静态链接和动态链接学习笔记

1、静态链接优缺点

优点:程序模块可以独立开发和测试,提高程序的开发效率。

缺点:费内存、需要更多的磁盘空间存储、模块更新和发布困难。

多个程序使用相同的静态库,会导致内存中有多份相同的静态库文件指令副本。如下图,存在两份Lib.o文件。

还有缺点是,静态库有一些改动,就会导致使用该静态库的所有程序需要进行重新编译和发布,带来更多的工作量。

 

2 、动态链接

解决上述问题的方法,将程序的各独立模块分离开来,等到程序运行时,需要用到该模块,再进行链接。

动态链接的思想:将程序的链接过程,延迟到程序的运行时。即、需要时再联系,做到自身的轻量,同时,程序间增加了相互协作的依赖条件。

特点:程序运行时可以动态地选择加载各种程序模块。—— 如插件(Plug-in)

如下图的所示,无论程序多少,内存中只有一份Lib.o的副本。

优点:省内存、减少内存物理页面的换入换出、增加CPU缓存的命中率;

           升级方便,如果库文件的API没有变化,只需要用新的库文件覆盖旧的库文件即可。(这种情况一般发生在程序需求开发已相对稳定阶段)。——这也说明,不是很明显的优点。

          提升开发的独立性,降低开发的耦合性:不同的模块可以使用不同的编程语言,独立进行测试。—— 这点静态库也有这样的优势。其实,这些这些是单一功能或者职责设计的优势。

         提升程序的兼容性:可以在各操作系统运行时,动态的链接对应操作系统提供的动态库文件。这点只要程序定义好需要的API,各操作系统根据自身的特点提供程序API所需的功能即可。

缺点:现实中,一般是应用开发人员,利用各平台提供的库文件实现自身程序功能。这可以解释为上层依赖底层实现。如果,顶层库文件的API有所变化或更新,就会导致程序没法运行,经常需要程序进行对应的修改。

综上对比:静态库、动态库都有自身的优势和劣势,实际开发中,应根据自身情况进行抉择。

疑问???

       在公司的开发中,大部分人认为程序采用静态链接要比动态链接的效率高,可从上述CPU的命中率和减少内存物理页面的换入换出等优势来看,动态链接也可以提升效率,这种情况如何判断?有种方式是在实践中对采用这两种方式进行对比测试,可这带来更多的工作量和复杂性,是否有一些判断准则?望读者可以为我解惑,不胜感激。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值