动态链接
出自 MBA智库百科(https://wiki.mbalib.com/)
动态链接(Dynamic Linking)
目录 |
什么是动态链接[1]
动态链接是指编译系统在链接阶段并不把目标文件和函数库文件链接在一起,而是等到程序在运行过程中需要使用时才链接函数库。
动态链接的优缺点[2]
一、动态链接的优点是:
1、共享:多个进程可以共用一个DLL,比较节省内存,从而可以减少文件的交换。
2、部分装入:一个进程可以将多种操作分散在不同的DLL中实现,而只将当前操作的DLL装入内存。
3、便于局部代码修改:即便于代码升级和代码重用;只要函数的接口参数(输入和输出)不变,则修改函数及其DLL时,无需对可执行文件重新编译或链接。
4、便于适应运行环境:调用不同的DLL,就可以适应多种使用环境并提供不同的功能。例如:不同的显示卡只需厂商为其提供特定的DLL,而操作系统和应用程序则不必修改。
二、动态链接的缺点是:
1、增加了程序执行时的链接开销。
2、程序由多个文件组成,因此增加了管理复杂度。
动态链接与静态链接[3]
源程序在经过编译生成目标代码后需要进行链接才能生成可执行文件。链接分为两种,一种是静态链接,另一种是动态链接。动态链接发生在程序运行时,动态链接的函数代码不出现在程序的EXE文件中;而静态链接发生在编译时,静态链接的函数代码实际被插入到程序的EXE文件中。用于静态链接的函数通常保存在OBJ和IJB文件中。例如,编写一个由一些独立的编译单元(文件)组成的大型程序时,链接器在创建EXE文件时将每个模块MOBJ文件结合起来,此时EXE文件将包含OBJ文件中的所有代码。
使用动态链接时,用于动态链接的函数代码保存在与程序的其他部分相独立的DEF文件中。读者将会看到,用户的程序要包含链接DLL函数加载指令的少量代码,但并不将函数本身包括进来。