地方政府公務人員四等-資訊處理類科計算機概要110 年第 6 題單選題
下列何者不是聯結器(linker)所需負責的工作?
A負責合併來自不同程式模組的目的(object)檔案
B確保程式中沒有未解決的參考(references)
C決定程式模組在執行時期所占用的記憶體位址
D將低階語言程式轉換成目的檔案,以供稍後執行正確答案
D正確答案
Linker 負責合併目的檔、解析參考;將低階語言(組語)轉成目的檔是組譯器(assembler)的工作。
為什麼答案是 D
將低階語言(組合語言)轉成目的檔是「組譯器 assembler」的工作;若是高階語言轉目的檔則是「編譯器 compiler」。這是 linker 的上游步驟,不是 linker 負責。
載入中…
完整詳解
Pro · 無限重點 Linker 負責合併目的檔、解析參考;將低階語言(組語)轉成目的檔是組譯器(assembler)的工作。
看到「轉換成目的檔」就是 compiler/assembler,不是 linker。Linker 處理的是「已經產生的 .obj」。
逐選項分析
A✕
Linker 核心工作就是把多個 .obj 檔(包含函式庫)合併成單一可執行檔,這是教科書定義。
B✕
解析 unresolved references(例如 A 模組呼叫 B 模組的函式)是 linker 的關鍵任務,若無法解析會出現 linking error。
C✕ 陷阱
Linker 會進行 relocation,決定各模組在記憶體中的相對位址(邏輯位址)。雖然實際執行時期位址由 loader/OS 配合處理,但 linker 確實負責位址配置工作。
D✓ 正確
將低階語言(組合語言)轉成目的檔是「組譯器 assembler」的工作;若是高階語言轉目的檔則是「編譯器 compiler」。這是 linker 的上游步驟,不是 linker 負責。
程式建構流程四大工具
| 工具 | 輸入 | 輸出 | 主要工作 |
|---|
| Compiler 編譯器 | 高階語言 (.c) | 組合語言 (.s) | 高階→低階翻譯 |
| Assembler 組譯器 | 組合語言 (.s) | 目的檔 (.obj) | 低階→機器碼 |
| Linker 聯結器 | 多個 .obj + 函式庫 | 可執行檔 (.exe) | 合併、解析參考、重定位 |
| Loader 載入器 | 可執行檔 | 記憶體中的程式 | 載入記憶體並執行 |
D 選項「將低階語言轉成目的檔」聽起來很像 linker 在處理低階的東西,但實際上「產生目的檔」是組譯器的任務。Linker 是「吃」目的檔,不是「產生」目的檔,方向要搞清楚。