簡體   English   中英

堆棧形式會像遞歸一樣導致溢出,但是會更晚嗎?

[英]Will stack form cause overflow just like recursion, but much later?

如果我將很深的遞歸轉換為堆棧形式,是否可以保證避免堆棧溢出? 也就是說,堆棧是放在堆棧還是堆上?

以前的遞歸下降到500萬步,然后引發了堆棧溢出。

是。 從現在開始,您將不得不擔心內存不足錯誤。

通常,在編程語言運行時中,堆棧要么由於未處於尾位置的函數而進行遞歸增長,要么由於未進行尾遞歸優化的運行時而增長,因此與該運行時可用的總內存相比,為堆棧保留的內存量很小。 當不使用編程語言堆棧時,您將使用堆內存,並且通常會更深入,因為其中有更多的內存。

但是,當您用完所有內存后,操作系統會願意(即不保留)為您分配更多的內存,並且需要更多內存的隨機操作將失敗。

當然,這些微不足道的物理限制不適用於理論計算。 就是 圖靈機永遠不會失敗,因為磁帶無限長,因此沒有更多的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM