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

在C語言中,關於未寫初始值的區域變數與全域變數,開始使用時的值,下列何者正確?

  1. A兩者一定都從0開始
  2. B區域變數從0開始,但全域變數的值不確定
  3. C全域變數從0開始,但區域變數的值不確定(未定)
查看答案與解析

正確答案:C. 全域變數從0開始,但區域變數的值不確定(未定)

全域變數與靜態變數放在.bss,程式開始時會以0填滿,所以從0開始。區域變數則是在每次函式被呼叫時建立於堆疊上,由於每次都用0填滿會耗費時間,因此該位置可能殘留先前使用過的資料。讀取未初始化的區域變數,結果可能每次執行都不同,所以務必先初始化再使用。

  • A. 區域變數不會花功夫設為0,所以是未定的。
  • B. 剛好相反。
  • C. 正確。這是放置位置不同所致。
練習這個領域 前往領域頁面

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

  1. 反覆進行malloc與free後,儘管剩餘記憶體的總量足夠,卻無法一次配置大塊區域。這種現象稱為什麼?
  2. 建置共用函式庫時,只公開要從外部使用的函式,並將內部函式的符號可見性(visibility)設為「hidden」,其優點下列何者正確?
  3. 關於C++中全域物件的建構函式在main之前執行的機制,下列何者正確?
  4. 關於編譯器從單一原始檔輸出的目的檔(.o),下列何者正確?
  5. 關於連結器的主要功能,下列何者正確?

這個領域的比較