連結器與載入器與執行檔格式
當遞迴過深而超過堆疊的上限時,在Linux等系統上一般會發生的事,下列何者正確?
- A碰到堆疊前方禁止存取的保護分頁(guard page),程式異常終止
- B作業系統自動將堆疊移到磁碟,因此可以無限深地遞迴
- C舊的堆疊框被自動清除,計算得以正確地繼續
查看答案與解析
正確答案:A. 碰到堆疊前方禁止存取的保護分頁(guard page),程式異常終止
堆疊有上限,其前方會放置禁止存取的保護分頁。當遞迴過深使堆疊到達這裡時,就會發生分頁錯誤(page fault),由作業系統停止程式(區段錯誤)。保護分頁的好處是能在破壞其他資料之前就停下來。若將大型陣列作為區域變數,也會發生同樣的事,因此大型資料放在堆積上比較安全。
- A. 正確。會被偵測為堆疊溢位。
- B. 不會延伸超過上限。
- C. 擅自清除堆疊框的話,就無法返回了。