2012-01-06 87 views
3

我對虛擬內存有這個微妙的問題。在一本書當執行ELF文件,文本和兩個數據段被加載 到虛擬內存關於虛擬內存

的獨立區域我讀到這句話

但是,如果我們例如編譯C由兩個源文件組成的程序不連接它將產生兩個目標文件。在兩個目標文件中,尋址都從零開始。然後,如果我們將兩個目標文件鏈接到一個可執行文件並檢查它,我們將觀察到尋址不再從零開始,而是一些地址已經分配給每個段。據我所知,這個分配的地址是一個虛擬內存地址。所以,我有兩個問題:

  1. 所以我是正確的,這是請求從OS的一些虛擬內存範圍,並賦予它細分編程連接器?
  2. 引用的作者是什麼意思,當他說虛擬地址是在進程執行時分配的?

回答

3

連接器將分配一個可以被用作「基礎」用於加載段的虛擬地址。所以是的,鏈接器確實分配了虛擬地址庫。操作系統只是把這個內存映射到一個物理地址。分配是將物理地址分配給虛擬地址的操作系統。

+0

感謝您的回答,可能是你知道使用了哪些系統調用由連接到要求作爲基礎,虛擬地址? – 2012-01-07 00:48:41

+0

我不是100%勝任這方面的工作,但從我的理解中,鏈接器指定它自己的任意虛擬地址,而不需要從操作系統請求。 – ExtremeCoder 2012-01-07 12:33:54