我有关于虚拟内存的这个微妙的问题。在一本书中我读到了这句话
执行ELF文件时,将加载文本和两个数据段 进入虚拟内存的独立区域
但是如果我们例如编译一个由两个源文件组成的C程序而没有链接它会产生两个目标文件。在两个目标文件中,寻址从零开始。然后,如果我们将两个目标文件链接到一个可执行文件并检查它,我们将观察到寻址不再从零开始,而是已经为每个段分配了一些地址。据我所知,这个分配的地址是一个虚拟内存地址。所以我有两个问题:
答案 0 :(得分:3)
链接器将分配一个虚拟地址,该地址可用作加载段的“基础”。所以是的,链接器确实分配了虚拟地址库。操作系统只是将此内存映射到物理地址。分配是操作系统将物理地址分配给虚拟地址。