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

關於.bss區段的特徵,下列何者正確?

  1. A是每次函式被呼叫時放置其區域變數的區域
  2. B是沒有初始值(或為0)的變數區域,檔案中只記錄大小,載入時以0填滿
  3. C是放置常數字串、無法寫入的區域
查看答案與解析

正確答案:B. 是沒有初始值(或為0)的變數區域,檔案中只記錄大小,載入時以0填滿

未寫初始值的全域變數與靜態變數,依C語言的規定從0開始。若內容全部為0,將一長串0存入檔案是浪費,因此.bss區段只記錄大小,由載入器配置記憶體並以0填滿。例如即使有「static char buf[1000000];」,執行檔也不會因此增大1 MB。

  • A. 區域變數放在堆疊上。
  • B. 正確。可節省檔案大小。
  • C. 常數放在.rodata。
練習這個領域 前往領域頁面

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

  1. 執行C語言的「char *p = "hello"; p[0] = 'H';」時,在許多環境中會異常終止。下列關於其原因的敘述何者正確?
  2. 下列全域變數中,一般會放在.bss區段的組合為何?
  3. 在C語言的函式中宣告、未加static的區域變數(自動變數),執行時會放在哪裡?
  4. 以C語言的malloc配置的記憶體,一般是從行程的哪個區域取得?
  5. 將Linux等一般行程的記憶體配置,由位址小的一側依序排列,下列何者正確?

這個領域的比較