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

當遞迴過深而超過堆疊的上限時,在Linux等系統上一般會發生的事,下列何者正確?

  1. A碰到堆疊前方禁止存取的保護分頁(guard page),程式異常終止
  2. B作業系統自動將堆疊移到磁碟,因此可以無限深地遞迴
  3. C舊的堆疊框被自動清除,計算得以正確地繼續
查看答案與解析

正確答案:A. 碰到堆疊前方禁止存取的保護分頁(guard page),程式異常終止

堆疊有上限,其前方會放置禁止存取的保護分頁。當遞迴過深使堆疊到達這裡時,就會發生分頁錯誤(page fault),由作業系統停止程式(區段錯誤)。保護分頁的好處是能在破壞其他資料之前就停下來。若將大型陣列作為區域變數,也會發生同樣的事,因此大型資料放在堆積上比較安全。

  • A. 正確。會被偵測為堆疊溢位。
  • B. 不會延伸超過上限。
  • C. 擅自清除堆疊框的話,就無法返回了。
練習這個領域 前往領域頁面

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

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

這個領域的比較