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