連結器與載入器與執行檔格式
關於C++中全域物件的建構函式在main之前執行的機制,下列何者正確?
- ACPU找到建構函式後,自動先行執行
- B編譯器一定會把所有建構函式抄寫到main函式的第一行
- C呼叫建構函式的函式位址被彙整在.init_array等表中,由啟動程式碼在main之前依序呼叫
查看答案與解析
正確答案:C. 呼叫建構函式的函式位址被彙整在.init_array等表中,由啟動程式碼在main之前依序呼叫
編譯器會為各檔案產生初始化全域物件的函式,並將其位址放入名為.init_array的特殊區段。連結器會把所有檔案的.init_array合併為一張表,由啟動程式碼或動態連結器在main之前依序呼叫這張表中的函式。相反地,結束時的處理則彙整在.fini_array中。跨檔案的初始化順序並未規定,因此要注意避免讓它們彼此相依。
- A. CPU不知道建構函式這個概念。
- B. 從main所在的檔案看不到其他檔案的物件。
- C. 正確。由連結器將各檔案的表合併成一張。