重定位 與 鏈結

2021-10-02 18:39:13 字數 858 閱讀 4787

③動態重定向:現代技術機基本都用這種技術。裝入程式把裝入模組裝入記憶體後,並不會立即把邏輯位址轉換為實體地址,而是把位址轉換推遲到程式真正執行時才發生。這種方式需要乙個重定位暫存器的支援。並且支援換入換出(每次位址會不同)

①靜態鏈結

將幾個目標模組鏈結裝配成乙個裝入模組時,即將每個模組中所用的外部呼叫符號,都變換為相對位址,進行鏈結所形成的乙個完整的裝入模組,通常都不要拆開它,要執行時可直接將它裝入記憶體。這種事先進行鏈結,以後不再拆開的鏈結方式,稱為靜態鏈結方式。

②裝入時動態鏈結(load-time dynamic linking)

使用者源程式經編譯後所得到的目標模組,是在裝入記憶體時,邊裝入邊鏈結的.即在裝入乙個目標模組時,若發生乙個外部模組呼叫,將引起裝入程式去找出相應的外部目標模組,並將它裝入記憶體,還要修改目標模

塊中的相對位址。裝入時動態鏈結方式有以下優點:

●便與軟體版本的修改和更新

●便於實現目標模組共享

若採用裝入時動態鏈結方式,os能夠將乙個目標模組鏈結到幾個應用模組,即實現多個應用程式對該模組的共享;然而,採用靜態鏈結方式時每個應用模組都必須含有該目標模組的拷貝,否則無法實現共享。

③執行時動態鏈結(run –time dynamic linking)

在許多情況下,每次要執行的模組可能是不相同的,但由於事先無法知道本次要執行哪些模組,故只能是將所有可能要執行到的模組,在裝入時全部鏈結在一起,是每次執行時的裝入模組是相同的。顯然這是低效的。

能有效的改變這種情況的鏈結方式,是最近幾年流行起來的執行時動態鏈結方式。這種鏈結方式,可將某些目標模組的鏈結,推遲到執行時才進行。即在執行過程中,若發現乙個被呼叫模組尚未裝入記憶體時,由os去找到該模組,將它裝入記憶體,並把它連線到呼叫者模組上。不同的程式之間可以共享**

鏈結指令碼與重定位

一 位置有關 和位置無關 以前,我們編寫程式的時候,根本不知道還有位置有關 和位置無關 不知道 的執行居然和 的鏈結位址有關,當然也不知道鏈結位址是什麼,但是在linux的學習中,這些都是必須的。舉個例子 我們在設計乙個程式的時候,就必須給這個程式指定乙個執行位址 這個指定的執行位址就是鏈結位址 這...

重定位和鏈結

鏈結和重定位是嵌入式c中很重要的部分,對於這一塊掌握的越精細越好。指令分為兩種 在程式設計編譯鏈結過程會給程式乙個執行位址,而且必須給編譯聯結器指定這個位址,最後得到的二進位制程式是和指定的鏈結位址相關的,這個位址叫做 鏈結位址 所以我們在程式編譯時其實就已經知道程式將來執行時的位址,這個位址叫做 ...

重定位和鏈結

指令分為兩種 在程式設計編譯鏈結過程會給程式乙個執行位址,而且必須給編譯聯結器指定這個位址,最後得到的二進位制程式是和指定的鏈結位址相關的,這個位址叫做 鏈結位址 所以我們在程式編譯時其實就已經知道程式將來執行時的位址,這個位址叫做 執行位址 執行位址和鏈結位址相關,但是不一定是同乙個,程式執行時必...