2009-07-28 30 views
0

地址空間重定位和鏈接器完成的重定位任務之間有什麼區別據我所知,鏈接器完成的重定位任務包括將符號引用連接到符號定義的過程。地址空間當可執行文件被帶入內存並且所有的地址引用都參考它被放置在內存中的地址的起始地址被解析時,重定位是關心的,而且我也想知道誰這個地址空間搬遷嗎?重定位任務

回答

1

處理器中有MMU(內存管理單元)。它爲每個進程/程序提供了有限的內存空間。這就是現在程序中緩衝區溢出不能造成太大損害的原因。這樣每個程序都在自己的記憶中。 OS處理這個。

編輯:

程序generaly從紅色唯一位置(ROM /硬盤/閃存)上運行,他們需要堆棧臨時值。對於c/C++中的情況來說,幾乎可以實現,但是特殊的值被定義爲char/int/long/float和數組。 這意味着鏈接器僅使用堆棧或程序本身中的數據(這只是一般性的只讀)

當程序需要額外內存的大小無法在編譯時定義它需要堆。堆被分配爲白色malloc或新的(c/C++)

但是,因爲從RAM讀取通常比從其他類型的內存存儲設備快,操作系統從RAM上的磁盤複製程序,並從那裏開始執行程序。

+0

@ralu請你詳細說明地址空間的重定位和由鏈接器完成的重定位之間的差異。??謝謝你的回答 – wantobegeek 2009-07-28 08:40:36

1

是的,你說得對。操作系統中的進程加載器執行加載時重定位。它實際上充當運行時鏈接器。