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

C++編譯器在函式名稱上附加參數型別等資訊以產生符號名稱的「名稱修飾(name mangling)」,其主要目的為下列何者?

  1. A讓函式名稱無法閱讀,以免程式被竊取
  2. B縮短函式名稱,使執行檔變小
  3. C讓連結器能區分名稱相同但參數型別不同的函式(多載,overload)與命名空間
查看答案與解析

正確答案:C. 讓連結器能區分名稱相同但參數型別不同的函式(多載,overload)與命名空間

連結器僅以名稱字串來比對符號。在C++中可以建立如「print(int)」與「print(double)」這樣同名的函式,若維持原樣便無法區分。因此編譯器會像「_Z5printi」這樣,將參數型別等嵌入名稱中。C語言的函式不會被修飾,所以從C++呼叫C函式時,要加上「extern "C"」讓它不做修飾。

  • A. 不是為了保護而設計的。
  • B. 名稱反而會變長。
  • C. 正確。因為連結器只以名稱來比對。
練習這個領域 前往領域頁面

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

  1. Linux的dlopen函式(相當於Windows的LoadLibrary)的用途,下列何者最為適切?
  2. 當100個行程使用相同的共用函式庫時,關於實體記憶體的使用方式,下列何者正確?
  3. 對目的檔進行反組譯時,發現呼叫外部函式printf之指令的跳躍目標是0這樣的暫時值。這個值會在何時被正確填入?
  4. 關於嵌入式開發中使用的連結器腳本(linker script)的功用,下列何者正確?
  5. 在沒有作業系統的微控制器上,通電後啟動程式碼在呼叫main之前所進行的處理,下列何者正確?

這個領域的比較