美文网首页
静态链接(三)

静态链接(三)

作者: 7bfedbe4863a | 来源:发表于2018-01-25 01:01 被阅读0次
链接时候的空间与地址分配
  1. 按序叠加(这种情况下,因为段的大小不全和页的大小相等(或倍数),所以会完成大量的内存空间的内部碎片)
  2. 相似段合并(把相同性质的段合并在一起)
    在合并段时,.bss段虽然在目标文件和可执行文件中不占文件的空间,但它在装载是占用地址空间,所以也要把它合并。
链接器分配的地址和空间指的是:
  • 在输出的可执行文件中的空间
  • 在装载后的虚拟地址中的虚拟地址空间(常用)
    对于有实际数据的段,在两者中都要分配空间;对于.bss来说,分配空间只是分配虚拟地址空间
相似段合并常采用两步链接的策略
  1. 第一步,空间与地址分配:扫描所有的输入目标文件,并且将输入目标文件中符号表中所有的符号定义和符号引用收集起来,统一放在一个全局符号表。获得所有输入目标文件的段长度,并且把它们合并,计算出各个段合并后的长度和位置,并建立映射关系。
  2. 第二步,符号解析和重定位(链接的核心):读取第一步后得到的输入文件中的段的数据、重定位信息,并且进行符号解析与重定位、调整代码中的地址等。

链接前后使用的是程序进程中的虚拟地址,所以我们关心的是各个段的虚拟内存空间VMA和大小,而不关心文件的偏移量。
在链接之前,目标文件中的所有段的VMA都是0(因为虚拟空间还没有分配),链接后各个段的起始地址是合并后段的起始地址加偏移量。
段中变量位置的确定:段的起始位置+偏移量

相关文章

  • 静态链接(三)

    链接时候的空间与地址分配 按序叠加(这种情况下,因为段的大小不全和页的大小相等(或倍数),所以会完成大量的内存空间...

  • 操作系统

    • Linux静态链接和动态链接; (转)静态链接和动态链接1、静态链接静态链接方法:#pragma comme...

  • 静态库静态链接静态库

    静态库·静态链接·静态库 这么搞的都是有强迫症的人在做SDK。 not me. PS: 多次静态链接同一个第三方库...

  • 静态链接

    静态链接 静态链接涉及的内容包含如下 空间地址的分配 符号解析和重定位 静态库链接 本文的测试代码以及其他文件存在...

  • 静态链接

    编译和链接 预处理 编译扫描(词法分析)、语法分析、语义分析(静态语义是编译器所能分析的,动态语义要在运行期才能确...

  • 静态链接

    大多数编译系统提供编译器驱动程序( compiler driver ),它代表用户在需要时调用语言预处理器、编译器...

  • 静态链接

    静态链接 当有两个目标文件时,如何将它们连接起来形成一个可执行文件?其中发生了什么? 使用两个源代码文件作为研究例...

  • 动态链接与静态链接

    什么是静态链接 如何实现静态链接 静态链接的优点与缺点 什么是动态链接 如何实现动态链接 动态链接的优点与缺点 S...

  • seo中的url结构优化

    一、url结构(访问结构)(链接结构) url一般有:静态链接,动态链接,伪静态链接 伪静态对seo来说非常...

  • iOS 编译与链接三:静态链接和动态链接

    编译的过程[https://www.jianshu.com/p/2211011e8c10]编译的产物[https:...

网友评论

      本文标题:静态链接(三)

      本文链接:https://www.haomeiwen.com/subject/kkapaxtx.html