catalog
空间与地址分配
将a.o
和 b.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 ...
,