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

转载参考博文
1、静态链接库的优点:
(1) 代码装载速度快,执行速度略比动态链接库快;
(2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免dll地狱等问题。
2 、动态链接库的优点 (动态库最大的好处是什么,不仅仅是代码共享,更重要的是“模块化”。)

(1) 更加节省内存并减少页面交换;

(2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;

(3) 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;

(4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

3、不足之处

(1) 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费;

(2) 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。而使用运行时动态链接,系统不会终止,但由于DLL中的导出函数不可用,程序会加载失败;速度比静态链接慢。当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。

4、静态链接的缺点
(1)如果静态库中有全局变量,那么在几个模块中使用,将会导致全局变量有不同的值。
(2)静态库编译时,不会进行链接检查,在生成静态库阶段检查不出来。
(3)几个模块,引用同一静态库,如果有一模块没有编译到,会引起巨大的差异导致问题。

5、动态链接的缺点
(1)当系统中多个应用程序都用了一个动态链接库,但是要求的版本不同,这时动态链接库之间就会相互干扰,容易出现dll地狱的问题。
(2)性能开销。动态链接库为了做到“共享代码,但是不共享数据”,引入了不小的开销,调用动态链接库中的函数,需要好几次间接内存访问才能走到函数入口,全局数据也是。

猜你喜欢

转载自blog.csdn.net/qq_32621445/article/details/77994712
今日推荐