程序员的自我修养——(4)静态链接

本文探讨了静态链接过程中空间与地址分配的策略,解释了如何避免目标文件段导致的空间浪费,并详细介绍了链接器如何为不同段合并、分配地址和空间。接着,文章阐述了符号解析和重定位的步骤,包括符号表的整合、虚拟地址的确定以及重定位表的作用,揭示了链接器如何修正指令和数据的地址,确保程序正确运行。
摘要由CSDN通过智能技术生成

空间与地址分配

a.ob.o 的目标文件,如何链接到一起,最终生成一个ab.exe 的可执行文件。


如果直接将各个目标文件, 依次的连接到一起:
(a的.text段) (a的 .data段) (a的 .bss段) (b的.text段) (b的 .data段) (b的 .bss段)

段的对齐单位是: 页。 (一个页是4Mb),这样,会导致有很多的零散的段!!!

比如,有些段只有1kb,这样会造成极大的空间浪费。


实际的做法是: 将相同段 合并到一起
(a和b的 .text段) (a和b的 .data段) (a和b的 .bss段)

“链接器 为目标文件 分配地址和空间” 这句话中,“地址和空间”,其实有2个含义:

  • 在生成的exe文件中的 空间
  • 在装载后的 虚拟地址中的 空间

对于.text 和 .data段,这俩 在exe文件里 和 装载后的虚拟地址里,都要分配空间
而对于.bss段来说,因为.bss 在 目标文件和exe里 是不占用文件空间的!! 所以,bss只会分配 装载后的虚拟空间


整个链接过程,其实是2个过程 Two-pass link 两步链接

  • 1, 空间与地址分配
    扫描所有输入的目标文件a.o b.o ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值