國家安全情報人員考試五等考試-資訊組資料處理大意112 年第 18 題單選題
有關 C 程式語言執行過程的敘述,下列何者錯誤?
A編譯器(Compiler)的功能,是將 C 原始碼程式轉成組合語言或機器語言目的模組(Object module)
B連結器(Linker)的功能,是將動態連結函式庫模組,與由 C 原始碼程式轉出目的模組,組合出可執行機器碼程式正確答案
C載入器(Loader)的功能,是將由 C 程式轉換的可執行機器碼程式載入電腦記憶體去執行
D連結器會產生原始碼與機器碼的連結資訊,方便程式除錯時參考
B正確答案
C 程式執行流程:原始碼→編譯器→目的模組→連結器→可執行檔→載入器→執行。B 把「動態」寫錯,應為靜態連結函式庫。
為什麼答案是 B
錯誤!連結器處理的是「靜態」連結函式庫,將其與目的模組合併成可執行檔。「動態」連結函式庫(DLL/.so)是在程式執行時才由作業系統載入連結,不在連結器階段處理。
載入中…
完整詳解
Pro · 無限重點 C 程式執行流程:原始碼→編譯器→目的模組→連結器→可執行檔→載入器→執行。B 把「動態」寫錯,應為靜態連結函式庫。
關鍵字:動態 vs 靜態。動態連結是執行時才連結,連結器階段處理的是「靜態」函式庫。
逐選項分析
A✕
編譯器確實是將高階語言(C)翻譯成組合語言或機器語言的目的模組(.obj/.o),此敘述正確。
B✓ 正確
錯誤!連結器處理的是「靜態」連結函式庫,將其與目的模組合併成可執行檔。「動態」連結函式庫(DLL/.so)是在程式執行時才由作業系統載入連結,不在連結器階段處理。
C✕
載入器(Loader)的工作就是把可執行機器碼載入記憶體並交由 CPU 執行,此敘述正確。
D✕
連結器在生成可執行檔時,可附帶符號表(symbol table)與除錯資訊,方便除錯器對照原始碼與機器碼,此敘述正確。
C 程式執行四階段
| 階段 | 工具 | 輸入 | 輸出 |
|---|
| 編譯 | Compiler | 原始碼 .c | 目的模組 .obj/.o |
| 連結 | Linker | 目的模組 + 靜態函式庫 | 可執行檔 .exe |
| 載入 | Loader | 可執行檔 | 載入記憶體 |
| 執行 | CPU | 記憶體中機器碼 | 程式運行結果 |
B 選項把「靜態」偷偷換成「動態」,一字之差整句就錯。考選部最愛這種陷阱!記住:連結器(Linker)階段處理的是「靜態」函式庫;動態連結函式庫是在「執行期」才由作業系統載入。