我是靠谱客的博主 烂漫电脑,最近开发中收集的这篇文章主要介绍程序员的自我修养——7、动态链接,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

7.1 为什么要动态链接


1)内存和磁盘空间浪费

静态链接的方式对于计算机内存和磁盘的空间浪费非常严重。(特别是多进程操作系统下)




在静态链接的情况下,Program1和Program2都用到了Lib.o这个模块,所以它们同时在链接输出的可执行文件Program1和Program2有两个副本。


在静态链接中,C语言静态库是很典型的浪费空间的例子。


2)程序开发和发布

静态链接对程序的更新、部署和发布也会带来很多麻烦。一旦程序中有任何模块更新,整个程序就要重新链接、发布给用户。



3)动态链接


动态链接:就是不对那些组成程序的目标文件进行链接,等到程序要运行时才进行链接


优点:

1、共享模块的好处不仅仅是节省内存,还可以减少物理页面的换入换出,还可以增加CPU缓存的命中率,因为不同进程间的数据和指令访问都集中在了同一个共享模块上。


2、动态链接使得程序的升级更加容易;使得开发过程中各个模块更加独立,耦合度更小便于不同开发者和开发组织之间独立进行开发和测试


3、在程序运行时,可以动态地选择加载各种程序模块,(被称为 插件(Plug-in))


缺点:

当程序所依赖的某个模块更新后,由于新的模块与旧的模块之间接口不兼容,导致了原有的程序无法运行。



动态链接的基本实现:

Linux中,动态链接文件被称为动态共享对象(DSO,Dynamic Shared Objects),共享对象。【.so】

windows中,动态链接文件被称为动态链接库(Dynamic Linking Library)。【.dll】


从本质上来讲,普通可执行程序和动态链接库中都包含指令和数据


程序与动态链接库之间真正的链接工作是由动态链接器完成的。(之前静态链接器 ld)


动态链接会导致程序在性能的一些损失,可以通过 延迟绑定 (Lazy Binding)等方法,使得动态链接的性能损失尽可能减少。


7.2 简单的动态链接例子












7.3 地址无关代码






7.4 延迟绑定(PLT)











7.5 动态链接的相关结构






7.6 动态链接的步骤和实现




7.7 显式运行时链接






最后

以上就是烂漫电脑为你收集整理的程序员的自我修养——7、动态链接的全部内容,希望文章能够帮你解决程序员的自我修养——7、动态链接所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部