堆栈溢出是什么,通俗说一下

作者:Milo Yip
链接:https://www.zhihu.com/question/19894869/answer/28649383
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

老公洗一堆盤子,洗完一個就疊在旁邊。
桌面比較小,只能一個個疊在一起。
然後老婆會幫忙把盤子一個個從上到下取出,安放在廚櫃裡。
如果老婆手腳太慢,那麼可能疊得太高,老公沒空間放盤子了,那麼就得停下來沒法洗了。

盤子 = 數據
疊起來的空間 = 堆栈
盤子沒位置放 = 堆栈溢出

==============================
2014/8/2 更新一下概念問題。

通常「堆棧溢出」是指「調用堆棧(call stack)的溢出」。要通俗地解釋調用堆棧可能比較困難,因為它涉及許多其他計算機架構的知識。而這個答案只是簡單地解釋堆棧這種數據結構的特點──先進後出/後進先出。溢出是指這個數據結構滿溢,不能存放更多數據。其他的數據結構也會遇到這個情況。即使數據結構並非固定容量,而是可擴展的,在有限的內存空間下仍是有滿溢的機會。

另外,很多時候,「調用堆棧溢出」的出現是與遞歸(recursion)相關的。我們可以把一些遞歸的實現改為迭代(iteration),但有時還是必須有一個自定義的堆棧數據結構,例如對樹的深度優先搜索(Depth-First Search, DFS)。自定義的堆棧也是有溢出的可能。

所以,雖然堆棧溢出常指調用堆棧溢出,但我認為本質上也只是一種數據結構的滿溢情況。對於缺乏計算機知識的對象,可能可以先解釋堆棧這種數據結構,有機會才更深入解釋如何用這種數據結構實現函數調用及函數內的局部存儲

转载于:https://www.cnblogs.com/gaomin-s/p/6039590.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值