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

面试轻松学习,offer快点拿


文章目录

  • 经典面试题 动态链接库与静态链接库的区别
  • 一、动态链接库是什么?
  • 二、静态链接库是什么?
  • 三、区别
    • 1.静态链接库速度快,避免一些问题
      • 不足之处
    • 2.动态链接库可以随意移除,节省内存空间
      • 不足之处
  • 总结

一、动态链接库是什么?

动态链接库(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不存在,系统将终止程序并给出错误信息


总结

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

希望这个博客能对你有所益处。我是轻王,我为自己代言。