程序员的自我修养 读书笔记 chp4

4.1 空间与地址分配

  1. 链接: 将几个输入目标文件加工后合并成一个输出文件的过程
  2. 链接方式:
    1. 按序叠加
      1. 在有很多输入文件的情况下, 输出文件将会有很多零散的段
    2. 相似段合并
      1. 两步链接:
        1. 空间与地址分配
        2. 符号解析和重定位

4.2 符号解析和重定位

  1. 重定位
  2. 重定位表
  3. 绝对寻址修正和相对寻址修正的区别在于绝对寻址修正后的地址为该符号的实际地址, 而相对寻址修正后的地址为符号距离被修正位置的地址差

4.3 COMMON 块

  1. 在处理弱符号的时候, 就是采用与COMMON块一样的机制
  2. 优先链接强符号

4.4 C++相关问题

4.4.1 代码消除

  1. C++ 的模板机制等特性导致各处会出现重复代码, 有效的处理方式是将每个模板的实例代码存放在一个段中, 链接的时候,根据各个模板的段信息进行链接
  2. 函数级别的链接
    1. 可以减少输出文件的长度,减少空间浪费。
    2. 但是会造成编译和链接的复杂化

4.4.2 全局构造和析构

  1. .init 在main 之前运行
  2. .fini 在main 之后运行

4.4.3 C++ 与 ABI

  1. ABI 指的是代码二进制兼容性, 更关注平台特性(希望二进制代码不用改变直接到处可以运行)
  2. API 更关注源代码层面
  3. C++ 的二进制兼容性不好

4.5 静态库链接

  1. 静态库可以简单的看成是一组目标文件的集合
    这里写图片描述

  2. 在运行库中, 一般一个目标文件中只有一个函数, 这是因为运行库有非常多的函数,独立的放置在目标文件中可以减少空间浪费, 避免将无效的函数链接到目标文件中去。

4.6 链接过程控制

  1. VC 中这种控制脚本为 .def 文件
  2. 一般通过ld 链接

4.7 BFD 库

  1. BFD 就是希望通过一种统一的接口来处理不同目标文件格式
  2. 将编译器和链接器本身同具体的目标文件格式隔离开来
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值