1. 程式人生 > >計算機系統基礎--連結 第一節課

計算機系統基礎--連結 第一節課

寫在前面:今天主要講解內容是連結器的定義和功能。

一、執行程式中的位置

P1
圖1

  連結器是程式執行的最後一道關卡,在彙編器工作後,生成.O檔案,然後通過連結器將.o檔案與呼叫庫中的.o檔案進行合併,符號分析,重定位等操作,生成一個可執行的目標程式。

二、功能

  1. 首先是將程式碼和資料分別儲存在記憶體當中
  2. 符號分析,在檔案中尋找符號引用,並將其符號定義(函式、全域性變數、靜態變數)進行關聯(庫中用不上的符號定義將被捨棄,節省記憶體)
  3. 重定位,將找到的符號引用進行修改,使它們指向對應的記憶體位置

三、提及知識

  1. 譯碼,譯碼是編碼的逆過程,在編碼時,每一種二進位制程式碼,都賦予了特定的含義,即都表示了一個確定的訊號或者物件。在從儲存器中取出一條指令後,要對於進行譯碼:將操作碼和運算元分離,然後進行相應操作。
  2. 全域性變數具有外部連結性(這個變數在整個程式中(所有的檔案中)都可以使用),靜態全域性變數具有內部連結性(這個變數可以在程式碼所在的檔案中使用),靜態區域性變數沒有連結性(這個變數只能在其程式碼塊中被使用
  3. 區域性變數是儲存在棧中的,並且每次是在函式內被引用時,才在棧中開闢空間,待函式結束後,其記憶體空間則被丟棄。
  4. 增量式編譯,只需編譯被改變的程式碼以及依賴於被改變程式碼的程式碼,可以加快編譯的速度。對於一個大的系統來說編譯一次是要消耗很長時間的。