連結器與載入器與執行檔格式

關於連結器所進行的重定位(relocation),下列說明何者正確?

  1. A程式碼與資料的最終位址決定後,將指令或資料中的位址改寫為正確的值
  2. B在程式執行中,將其搬移到另一部電腦繼續執行
  3. C記憶體不足時,將分頁(page)換出到儲存裝置
查看答案與解析

正確答案:A. 程式碼與資料的最終位址決定後,將指令或資料中的位址改寫為正確的值

編譯器是將各檔案視為從位址0開始來產生的,並將要使用其他檔案函式或自身變數位址的位置記錄為重定位資訊。連結器排列所有檔案、決定實際位址後,會依所記錄的各個位置計算出正確的位址(或與PC的距離)並寫入指令。在動態連結中,類似的改寫有一部分是在執行時由動態連結器進行。

  • A. 正確。改寫重定位資訊所指的位置。
  • B. 那是行程的搬移(migration)。
  • C. 那是作業系統的分頁置換。
練習這個領域 前往領域頁面

連結器與載入器與執行檔格式的其他題目

  1. 連結C語言程式時出現「undefined reference to `foo'」(對foo的未定義參照)錯誤,最可能的原因為下列何者?
  2. 在a.c與b.c中都定義了未加static、同名的全域函式void init(void),然後進行連結。下列關於會發生之情形的敘述,何者正確?
  3. 在C語言中以static定義函式時(例:static int helper(void)),下列關於其效果的敘述何者正確?
  4. 在C語言中寫下「extern int count;」時,下列關於其意義的敘述何者正確?
  5. 關於Linux等系統常用的ELF格式檔案,下列何者正確?

這個領域的比較