动态链接与静态链接的优缺点

静态链接的优点*
1、程序的启动速度和运行速度相对于动态链接快。

静态链接的缺点
1、内存的磁盘空间的浪费
当多个进程静态链接同一个静态库时,会复制多个副本,每个程序链接静态库的时候都会链接一个副本到目标文件里,链接的进程越多,副本也就越多,在磁盘上占用的空间就会变大,程序运行的时候,也会占用内。
2、模块更新麻烦
一个大型项目都会有很多个独立的功能模块,项目发布出去后,后期的维护中,有一个功能模块需要修改bug,而模块又是静态模块,需要整个项目程序进行重新编译后,再发布给客户升级,升级文件的容量非常大,客户获取程序、升级程序就非常不便,需要消耗很多时间。所以静态链接给程序的更新带来很大的麻烦。

动态链接的优点
1、节省磁盘和内存

与静态链接不同,多个进程动态链接同一个动态库时,不需要把动态库链接到目标文件李,但会程序运行是需要依赖动态库。再磁盘空间不会造成浪费。在内存上,也是共享一份,可以节省内存。

2、模块更新速度快
程序发布出去后,如果某个模块需要更新,大部分情况下只需要编译该模块,不需要编译整个工程。客户只需要获取该模块并升级就可以,非常方便。但动态库会出现版本不兼容问题,需要版本管理机制来管理。

3、有利于程序的拓展性
动态链接可以再程序运行的时候可以动态地选择加载各个程序模块,实现程序功能的拓展。类似“插件“,只需要加载插件就可以实现该插件功能。

**动态链接的缺点
动态链接相对与静态链接来说,它是以一部分性能为代价取换取它的优点的,所以动态链接会比静态链接运行的速度相对会慢一些。主要有两个原因
1、动态连接对于变量或者函数的访问,需要进行复杂的GOT定位,然后间接寻址,包括模块之间的调用也需要GOT定位。、
2、动态链接是在程序运行的时候取完成的,会做一些装载工作,像地址的重新分配、符号查找、解析、重定位等。会减慢程序的启动速度。

总结: 不管是静态链接还是动态链接,都会使程序更加模块化,耦合度更小,极大促进程序的开发效率。

你可能感兴趣的:(linux)