4.1 程序的裝入和鏈接
在計(jì)算機(jī)中,如何把我們編寫的計(jì)算機(jī)高級語言?一般要經(jīng)過幾個步驟:首先是要編譯,由編譯程序(Compiler)將用戶源代碼編譯成若干個目標(biāo)模塊(Object Module);其次是鏈接,由鏈接程序(Linker)將編譯后形成的一組目標(biāo)模塊,以及他們所需要的庫函數(shù)鏈接在一起,形成一個完整的裝入模塊(Load Module),最后是裝入,由裝入程序(Loader)將裝入模塊裝入內(nèi)存。
4.1.1 程序的裝入
在將一個裝入模塊裝入內(nèi)存時,可以有
1.絕對裝入方式
2.可重定位裝入方式
3.動態(tài)運(yùn)行時裝入方式
絕對裝入方式:
不需要對程序和數(shù)據(jù)地址進(jìn)行修改可重定位裝入方式:
在裝入時對目標(biāo)程序中指令和數(shù)據(jù)的修改過程稱為重定位,又因?yàn)榈刂纷儞Q通常是在裝入時一次完成的,以后不再發(fā)生,故城為靜態(tài)重定位
(靜態(tài)鏈接以后可以使用)動態(tài)運(yùn)行時重定位:
程序和數(shù)據(jù)的地址在內(nèi)存中的位置可能要經(jīng)常改變,此時就應(yīng)采用動態(tài)運(yùn)行時裝入的方式,在裝入模塊裝入內(nèi)存后,并不立即把裝入模塊中的相對地址換位絕對地址,而是把這種地址轉(zhuǎn)換推遲到程序真正要執(zhí)行時才進(jìn)行。