06数据段的合并

06数据段的合并

前提:
1)地址回填与数据段合并发生在链接阶段,当链接后main的首地址确定后,就会进行地址回填;
2)而动态库函数地址的确定是发生在运行时,只有动态库被加载后,该动态库函数的地址才会确定,也叫延时调用。 两者是不一样的。
3)至于地址回填与动态库函数的确定地址的区别,你可以认为地址回填只是大概的回填main的首地址,真正的地址仍要等待动态库被加载到内存时才确认。
4)以上地址回填与数据段合并都是针对于动态库制作时的知识。

1 数据段的合并
在这里插入图片描述
看图,数据段的合并是将只读的代码区和存储区合并,还有将全局区的bss段,Data段合并,目的是节省空间。因为内存最小的开辟内存空间单位是页,一页=4k。 例如我代码区和存储区不合并,都存放1k的字节,但是由于最小开辟单位是一页,所以两个总共开辟8k。为了节省内存,合并之后就只需要开辟一页,节省了4k的内存。

这就是动态库链接时为什么要进行数据段合并。至于静态库,我猜它应该页采用类似的方法进行处理,但是地址回填静态库应该是不存在的,因为静态库是固定的,在链接前已经知道了各个函数的确定首地址。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值