前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重定位 静态链接 动态链接 动态加载

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

作者头像
平凡的学生族
发布2019-05-25 09:43:33
1.6K0
发布2019-05-25 09:43:33
举报
文章被收录于专栏:后端技术后端技术

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


静态重定位

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

动态重定位

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

静态链接、动态链接

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

装入时链接:

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

运行时链接:

  • 用API函数LoadLibrary或LoadLibraryEx函数来装入动态库(共享引用计数增加1)
  • 通过GetProcAddress函数来获得函数的地址,并且传递给函数相应的参数,调用这个函数。
  • 在动态库用完后,可通过FreeLibrary函数来释放动态库资源(共享引用计数减1)。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 静态重定位
  • 动态重定位
  • 静态链接、动态链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档