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

關於C++中全域物件的建構函式在main之前執行的機制,下列何者正確?

  1. ACPU找到建構函式後,自動先行執行
  2. B編譯器一定會把所有建構函式抄寫到main函式的第一行
  3. C呼叫建構函式的函式位址被彙整在.init_array等表中,由啟動程式碼在main之前依序呼叫
查看答案與解析

正確答案:C. 呼叫建構函式的函式位址被彙整在.init_array等表中,由啟動程式碼在main之前依序呼叫

編譯器會為各檔案產生初始化全域物件的函式,並將其位址放入名為.init_array的特殊區段。連結器會把所有檔案的.init_array合併為一張表,由啟動程式碼或動態連結器在main之前依序呼叫這張表中的函式。相反地,結束時的處理則彙整在.fini_array中。跨檔案的初始化順序並未規定,因此要注意避免讓它們彼此相依。

  • A. CPU不知道建構函式這個概念。
  • B. 從main所在的檔案看不到其他檔案的物件。
  • C. 正確。由連結器將各檔案的表合併成一張。
練習這個領域 前往領域頁面

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

  1. 關於編譯器從單一原始檔輸出的目的檔(.o),下列何者正確?
  2. 關於連結器的主要功能,下列何者正確?
  3. 關於連結器所進行的符號解析,下列說明何者正確?
  4. 關於連結器所進行的重定位(relocation),下列說明何者正確?
  5. 連結C語言程式時出現「undefined reference to `foo'」(對foo的未定義參照)錯誤,最可能的原因為下列何者?

這個領域的比較