程式編譯和鏈結

2021-09-01 06:17:30 字數 901 閱讀 9874

程式進記憶體的一般過程:

1、編譯compiler:編譯程式:將使用者源**編譯成若干個目標模組。

2、鏈結link:鏈結程式:將形成的一組目標模組,及它們需要的庫函式鏈結在一起,形成乙個完整的裝入模組。

3、裝入load:由裝入程式將裝入模組裝入記憶體,構造pcb,形成程序,開始執行(使用實體地址)。

靜態可重定位裝入方式:

1、位址對映在程式執行之前進行,重定位後實體地址不再改變。

2、可由專門設計的重定位裝配程式完成(軟):裝入時根據所定位的記憶體位址去修改每個邏輯位址,新增相應偏移量,重定位為實體地址。

3、優點:不需硬體支援,可以裝入有限的多道程式。缺點:軟體裝入一次完成,乙個程式通常需要占用連續的記憶體空間,程式裝入記憶體後不能移動。也不易實現共享。

動態執行時(重定位)裝入方式:

1、實際執行中往往會需要程式在記憶體中的各位置移動,即經常需要重定位到不同的實體地址上。這種執行時移動程式要求位址變換要快速,實現時一般依靠硬體位址變換機構——乙個重定位暫存器。

2、程式裝入記憶體時,可多次重定位到不同位置。且可以不立即把裝入模組中的相對位址轉換為絕對位址,而是把這種位址轉換推遲到程式真正要執行時才進行。更適用於部分裝入

1、裝入執行前,生成可執行檔案時進行的。

2、將多個目標模組及所需庫函式鏈結成乙個整體,以後不再拆開。

1、由乙個目標模組開始裝入,若又涉及外部模組呼叫事件,裝入程式再找出相應的外部目標模組,並將它裝入記憶體,還要修改目標模組中的相對位址。

2、比靜態鏈結好在**?

(1) 靜態鏈結好的程式,修改部分模組後,需重新鏈結成可裝入程式。動態方式則便於修改和更新。

(2) 便於實現共享。靜態的n個程式都需要乙個模組時,需要進行n次拷貝。

程式的編譯和鏈結

一般來說,無論是c c 還是pas,首先要把原始檔編譯成中間 檔案,在windows下也就是 obj 檔案,unix下是 o 檔案,即 object file,這個動作叫做編譯 compile 然後再把大量的 object file合成執行檔案,這個動作叫作鏈結 link 編譯時,編譯器需要的是語法...

程式編譯鏈結

認識各種儲存部件 暫存器 記憶體 磁碟 暫存器 快取記憶體 記憶體 磁碟快取 磁碟 主存 儲存程序執行時的程式和資料 暫存器 速度最快,昂貴容量不大,一般以字為單位,只要存放指令一次操作的資料就夠了 儲存部件的層次 快取記憶體 一種速度比記憶體快的儲存裝置,一般同暫存器一樣整合在cpu中。存放記憶體...

關於程式的編譯和鏈結

在此,我想多說關於程式編譯的一些規範和方法,一般來說,無論是c c 還是pas,首先要把原始檔編譯成中間 檔案,在windows下也就是 obj 檔案,unix下是 o 檔案,即 object file,這個動作叫做編譯 compile 然後再把大量的object file合成執行檔案,這個動作叫作...