2012-01-06 81 views
3

我对虚拟内存有这个微妙的问题。在一本书当执行ELF文件,文本和两个数据段被加载 到虚拟内存关于虚拟内存

的独立区域我读到这句话

但是,如果我们例如编译C由两个源文件组成的程序不连接它将产生两个目标文件。在两个目标文件中,寻址都从零开始。然后,如果我们将两个目标文件链接到一个可执行文件并检查它,我们将观察到寻址不再从零开始,而是一些地址已经分配给每个段。据我所知,这个分配的地址是一个虚拟内存地址。所以,我有两个问题:

  1. 所以我是正确的,这是请求从OS的一些虚拟内存范围,并赋予它细分编程连接器?
  2. 引用的作者是什么意思,当他说虚拟地址是在进程执行时分配的?

回答

3

连接器将分配一个可以被用作“基础”用于加载段的虚拟地址。所以是的,链接器确实分配了虚拟地址库。操作系统只是把这个内存映射到一个物理地址。分配是将物理地址分配给虚拟地址的操作系统。

+0

感谢您的回答,可能是你知道使用了哪些系统调用由连接到要求作为基础,虚拟地址? – 2012-01-07 00:48:41

+0

我不是100%胜任这方面的工作,但从我的理解中,链接器指定它自己的任意虚拟地址,而不需要从操作系统请求。 – ExtremeCoder 2012-01-07 12:33:54