概述
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、动态链接所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复