C++ 动态链接 静态链接

本文主要内容:什么是动态链接、静态链接?静态链接、动态链接的优缺点是什么?

1. 什么是静态链接、动态链接

静态链接:静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器汇编器生成)链接到一块生成可执行程序。

动态链接(Dynamic Linking):相对于静态链接而言,要等到程序运行时再将组成程序的目标文件进行链接的过程。

2.静态链接、动态链接的优缺点

静态链接

优点

不同的程序模块可以独立开发和测试,最后链接在一起供用户使用,促进程序开发效率;

缺点

(1) 浪费空间  这是由于多进程情况下,每个进程都要保存静态链接函数的副本

(2)更新困难  当链接的众多目标文件中有一个改变后,整个程序都要重新链接才能使用心得版本

动态链接

优点

(1)当系统多次使用同一个目标文件时,只需要加载一次即可,节省内存空间

(2)不同数据间的数据和指令访问都集中在了同一个共享模块,可以减少物理页面的换入换出,增加CPU的缓存命中率

(3)程序升级变得容易  当升级某个共享模块时,只需要简单的将旧目标文件替换掉,程序下次运行时,新版目标文件会被自动装载到内存并链接起来,即完成升级

(4)插件的引入  程序运行时可以动态选择加载的各种模块,即选择插件

(5)加强程序的兼容性  动态链接库相当于在程序和操作系统间增加一个中间层,消除程序对不同平台之间的依赖性

缺点

(1)当程序依赖的某个模块更新后,如果新旧模块接口不兼容,将导致整个程序无法运行

(2)导致性能损失  动态链接把链接的过程推迟到装载的时候,那么程序每次被加载时都要进行重新链接,但是导致的性能损失与节省的空间和灵活性相比,还是值得的!

 

posted @ 2015-08-10 21:40  self-imporvement  阅读(2274)  评论(0编辑  收藏  举报