重定位 静态链接 动态链接 动态加载


总结:并没有找到动态链接与动态加载的明显区别,但动态链接与静态链接的区别是明显的:
一个是编译时就链接进可执行文件,一个是执行时才链接。


静态重定位

  • 重定位时,取重定位项,加上重定位因子得到欲修改位置的实际地址。
  • 优点:无须硬件支持
  • 缺点:程序重定位以后就不能在内存中移动。要求程序的存储空间连续的,不能把程序存储到若干个不连续的区域中。

动态重定位

  • 当CPU取一条访问内存的指令时,地址变换硬件将指令中的相对地址重定位寄存器中的值 相加,再根据和值去访问该单元的数据。
  • 装配模块不加任何修改就装入内存
  • 需要硬件(重定位寄存器)的支持

静态链接、动态链接

  • 静态链接
  • 动态链接(dll)
    • 装入时链接
    • 运行时链接

装入时链接:

  • 用一个动态导入表保存需要使用的dll文件和dll中的函数。
  • 装入时检根据动态导入表依次装入每个动态库。

运行时链接:

  • 用API函数LoadLibrary或LoadLibraryEx函数来装入动态库(共享引用计数增加1)
  • 通过GetProcAddress函数来获得函数的地址,并且传递给函数相应的参数,调用这个函数。
  • 在动态库用完后,可通过FreeLibrary函数来释放动态库资源(共享引用计数减1)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容