新聞中心
PRESS CENTER
鏈接地址和運行地址:可能相同也可能不同
對于位置有關(guān)代碼來說,最終執(zhí)行時的運行地址和編譯鏈接時給定的鏈接地址必須相同,否則一定出錯。我們之前的裸機程序中,Makefile中用 - Ttext 0x0
來指定鏈接地址是0x0。這意味著我們認為這個程序?qū)頃旁?x0這個內(nèi)存地址去運行。
但是實際上我們運行時的地址是0xd0020010(我們用dnw.下載時指定的下載地址)。這兩個地址看似不同,但是實際相同。這是因為S5PV210內(nèi)部做了映射,把SRAM映射到了0x0地址去。
分清楚這兩個概念
鏈接地址:鏈接時指定的地址( 指定方式為: Makefile中用-Ttext,或者鏈接腳本)N
運行地址:程序?qū)嶋H運行時地址(指定方式:由實際運行時被加載到內(nèi)存的哪個位置說了算)

運行時的地址是由運行時決定的S編譯鏈接時是無法絕對確定運行時地址的.
鏈接地址是由程序員在編譯鏈接的過程中,通過Makefile中-Ttext
xxx或者在鏈接腳本蟲指定的。程序員事先會預(yù)知自己的程序的執(zhí)行要求,并且有一個期望的執(zhí)行地址,并且會用這個地址來做鏈接地址一
舉例: 1、linux中 的應(yīng)用程序。gcc hello.c -。
hello,這時使用默認的鏈接地址就是0x0,所以應(yīng)用程序都是鏈接在0地址的。因為應(yīng)用程序運行在操作系統(tǒng)的-一個進程中,在這個進程中這個應(yīng)用程序獨享4G的虛擬地址空間。所以應(yīng)用程序都可以鏈接到0地址,因為每個進程都是從0地址開始的。(編譯時可以不給定鏈接地址而都使用0)
相關(guān)關(guān)鍵詞: