
动态链接库的最初目的是节约应用程序所需的磁盘和内存空间。在一个传统的非共享库中,一部分代码简单地附加到调用的程序上。如果两个程序调用同一个子程序,就会出现两份那段代码。相反,许多应用共享的代码能够切分到一个动态链接库中,在硬盘上存为一个文档,在内存中使用一个实例(instance)。动态链接库的广泛应用使得早期的视窗能够运行在紧巴巴的内存条件下。
动态链接库提供了如模块化这样的共享库的普通好处。模块化允许仅仅更改几个应用程序共享使用的一个动态链接库中的代码和数据而不需要更改应用程序自身。这种模块化的基本形式允许如Microsoft Office、Microsoft Visual Studio、甚至微软视窗自身这样大的应用程序使用较为紧凑的补丁和服务包。
模块化的另外一个好处是插件的通用接口使用。单个的接口允许旧的模块与新的模块一样能够与以前的应用程序运行时无缝地集成到一起,而不需要对应用程序本身作任何更改。这种动态扩展的思想在ActiveX中发挥到了极致。
尽管有这么多的优点,使用动态链接库也有一个缺点:动态链接库地狱,也就是几个应用程序在使用同一个共享动态链接库库发生版本冲突。这样的冲突可以通过将不同版本的问题动态链接库放到应用程序所在的文件夹而不是放到系统文件夹来解决;但是,这样将抵消共享动态链接库节约的空间。目前,Microsoft .NET将解决动态链接库 hell问题当作自己的目标,它允许同一个共享库的不同版本并列共存。由于现代的计算机有足够的磁盘空间和内存,这也可以作为一个合理的实现方法。
内存管理
在Win32中,DLL文档按照片段(sections)进行组织。每个片段有它自己的属性,如可写或是只读、可执行(代码)或者不可执行(数据)等等。