动态链接是相对于静态链接而言的,当多个应用程序一起运行,并且均调用了某函数的代码时,此时动态链接库允许这些应用程序共享该函数的代码,以达到节省内存的效果。
动态链接发生在程序运行时,其是在应用程序调用Windows API函数运行时才链接上的。但在链接时,链接器要先为调用者准备一些适当的信息,才能够在运行时顺利转到DLL执行。在动态链接中,所要调用的函数代码并没有被复制到可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息。
当应用程序开始运行时,在windows的管理下,应用程序和响应的动态链接之间建立关系。当药执行所调用的动态链接时,根据链接的描述信息,Windows转去执行动态链接中相应的函数代码。
一般情况下,如果一个应用程序使用了动态链接库,Win32系统通过内存映射文件保证内存中只有一份DLL的复制品。DLL首先被调入Win32系统的全局堆栈,然后映射到调用这个DLL的进程地址空间。在Win32系统中,每个进程拥有自己的32位线性地址空间。如果一个DLL被多个进程调用,每个进程都会收到该DLL的一份映像(而非复制品)。
使用动态链接技术可以减小可执行文件的大小,便于实现资源之间的共享,还有利于程序的维护与升级。
并不是只有.dll扩展名的文件才是动态链接库。像.exe、.fon、.drv、.mod都是动态链接库。