经典面试题 动态链接库与静态链接库的区别

本文介绍了静态链接库和动态链接库的区别,静态链接库在程序运行时代码直接整合,执行效率高但文件体积大,而动态链接库在运行时动态加载,节省内存,但依赖外部DLL文件,可能引发找不到DLL的问题。两者各有优劣,适用于不同的开发场景。
摘要由CSDN通过智能技术生成

经典面试题 动态链接库与静态链接库的区别

面试轻松学习,offer快点拿


一、动态链接库是什么?

动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、“.ocx”(包含ActiveX控制的库)或者 “.drv”(旧式的系统驱动程序)。

二、静态链接库是什么?

静态链接库就是你使用的.lib文件,库中的代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。格式如:#pragma comment(lib,“XXX.lib”)

三、区别

1.静态链接库速度快,避免一些问题

  • 静态链接库是.lib格式的文件,一般在工程的设置界面加入工程中,程序编译时会把lib文件的代码加入你的程序中因此会增加代码大小。

  • 程序一运行lib代码强制被装入你程序的运行空间,不能手动移除lib代码。但是代码装载速度快,执行速度略比动态链接库快;

  • 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。

静态链接库不同于动态链接库(.dll),在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为.LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。

不足之处

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

2.动态链接库可以随意移除,节省内存空间

  • 使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
  • 动态链接库是程序运行时动态装入内存的模块,格式*.dll,在程序运行时可以随意加载和移除,节省内存空间。
  • 适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

例如,您有一个大型网络游戏,如果把整个数百MB甚至数GB的游戏的代码都放在一个应用程序里,日后的修改工作将会十分费时,而如果把不同功能的代码分别放在数个动态链接库中,您无需重新生成或安装整个程序就可以应用更新。

不足之处

使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息


总结

通过以上两个例子可以轻松了解静态和动态的区别就是在链接时如何处理库函数,也就是如此导致的执行效率与使用方式的区别。

希望这个博客能对你有所益处。我是轻王,我为自己代言。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫轻王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值