堆棧溢出是什麼,通俗說一下

做者:Milo Yip
連接:https://www.zhihu.com/question/19894869/answer/28649383
來源:知乎
著做權歸做者全部,轉載請聯繫做者得到受權。

老公洗一堆盤子,洗完一個就疊在旁邊。 桌面比較小,只能一個個疊在一塊兒。 然後老婆會幫忙把盤子一個個從上到下取出,安放在廚櫃裡。 若是老婆手腳太慢,那麼可能疊得過高,老公沒空間放盤子了,那麼就得停下來沒法洗了。 盤子 = 數據 疊起來的空間 = 堆棧 盤子沒位置放 = 堆棧溢出 ============================== 2014/8/2 更新一下概念問題。 一般「堆棧溢出」是指「調用堆棧(call stack)的溢出」。要通俗地解釋調用堆棧可能比較困難,因為它涉及許多其餘計算機架構的知識。而這個答案只是簡單地解釋堆棧這種數據結構的特點──先進後出/後進先出。溢出是指這個數據結構滿溢,不能存放更多數據。其餘的數據結構也會遇到這個情況。即便數據結構並非固定容量,而是可擴展的,在有限的內存空間下還是有滿溢的機會。 另外,不少時候,「調用堆棧溢出」的出現是與遞歸(recursion)相關的。我們能夠把一些遞歸的實現改為迭代(iteration),但有時還是必須有一個自定義的堆棧數據結構,例如對樹的深度優先搜索(Depth-First Search, DFS)。自定義的堆棧也是有溢出的可能。 因此,雖然堆棧溢出常指調用堆棧溢出,但我認為本質上也只是一種數據結構的滿溢情況。對於缺少計算機知識的對象,可能能夠先解釋堆棧這種數據結構,有機會才更深刻解釋如何用這種數據結構實現函數調用及函數內的局部存儲
相關文章
相關標籤/搜索