动态链接库与可执行文件的本质区别?

2024-12-04 17:36:21
推荐回答(2个)
回答1:

  本质区别在于动态链接库本身是不能被执行的,必须要被可执行文件调用才能实现功能。
  动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、".ocx"(包含ActiveX控制的库)或者 ".drv"(旧式的系统驱动程序)。
  动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。
  使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,您有一个大型网络游戏,如果把整个数百MB甚至数GB的游戏的代码都放在一个应用程序里,日后的修改工作将会十分费时,而如果把不同功能的代码分别放在数个动态链接库中,您无需重新生成或安装整个程序就可以应用更新。
  可执行文件 (executable file) 指的是可以由操作系统进行加载执行的文件。在不同的操作系统环境下,可执行程序的呈现方式不一样。
  在windows操作系统下,可执行程序可以是 .exe文件 .sys文件 .com等类型文件。

回答2:

你的理解几乎99%都是正确的,但是要注意,DLL至少有一个或多个入口点。它本身没有内存空间,但是它实例化的对象是占用内存空间的。------------------有些功能必须写DLL?这个不一定,这取决于需求。对于绝大多数程序来说,写DLL是为了更好的功能模块重用,而不是每次都去写新的代码。如果你了解一点面向对象的开发理念,就能理解这种重用的概念了,这叫做封装。当然,有些程序是必须通过DLL来实现的,比如,我要达到某种见不得人的目的,但是不能创建新的进程,因为会被别人发现,所以我决定,把我写的功能封装成DLL,然后注入到系统进程中去,让操作系统来帮我达到目的。