总结:并没有找到动态链接与动态加载的明显区别,但动态链接与静态链接的区别是明显的:
一个是编译时就链接进可执行文件,一个是执行时才链接。
静态重定位
- 重定位时,取重定位项,加上重定位因子得到欲修改位置的实际地址。
- 优点:无须硬件支持
- 缺点:程序重定位以后就不能在内存中移动。要求程序的存储空间是连续的,不能把程序存储到若干个不连续的区域中。
动态重定位
- 当CPU取一条访问内存的指令时,地址变换硬件将指令中的相对地址与重定位寄存器中的值 相加,再根据和值去访问该单元的数据。
- 装配模块不加任何修改就装入内存
- 需要硬件(重定位寄存器)的支持
静态链接、动态链接
- 静态链接
- 动态链接(dll)
- 装入时链接
- 运行时链接
装入时链接:
- 用一个动态导入表保存需要使用的dll文件和dll中的函数。
- 装入时检根据动态导入表依次装入每个动态库。
运行时链接:
- 用API函数LoadLibrary或LoadLibraryEx函数来装入动态库(共享引用计数增加1)
- 通过GetProcAddress函数来获得函数的地址,并且传递给函数相应的参数,调用这个函数。
- 在动态库用完后,可通过FreeLibrary函数来释放动态库资源(共享引用计数减1)。