python读取文件数据堆栈溢出的原因_堆栈溢出一般是什么原因?
堆棧是一個(gè)在計(jì)算機(jī)科學(xué)中經(jīng)常使用的抽象數(shù)據(jù)類型。堆棧中的物體具有一個(gè)特性: 最后一個(gè)放入堆棧中的物體總是被最先拿出來, 這個(gè)特性通常稱為后進(jìn)先出(LIFO)隊(duì)列。 堆棧中定義了一些操作。 兩個(gè)最重要的是PUSH和POP。 PUSH操作在堆棧的頂部加入一 個(gè)元素。POP操作相反, 在堆棧頂部移去一個(gè)元素, 并將堆棧的大小減一。
堆棧溢出的產(chǎn)生是由于過多的函數(shù)調(diào)用,導(dǎo)致調(diào)用堆棧無法容納這些調(diào)用的返回地址,一般在遞歸中產(chǎn)生。堆棧溢出很可能由無限遞歸(Infinite recursion)產(chǎn)生,但也可能僅僅是過多的堆棧層級。
堆溢出:不斷的new 一個(gè)對象,一直創(chuàng)建新的對象,
棧溢出:死循環(huán)或者是遞歸太深,遞歸的原因,可能太大,也可能沒有終止。
通常「堆棧溢出」是指「調(diào)用堆棧(call stack)的溢出」。要通俗地解釋調(diào)用堆棧可能比較困難,因?yàn)樗婕霸S多其他計(jì)算機(jī)架構(gòu)的知識。而這個(gè)答案只是簡單地解釋堆棧這種數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)──先進(jìn)后出/后進(jìn)先出。溢出是指這個(gè)數(shù)據(jù)結(jié)構(gòu)滿溢,不能存放更多數(shù)據(jù)。其他的數(shù)據(jù)結(jié)構(gòu)也會遇到這個(gè)情況。即使數(shù)據(jù)結(jié)構(gòu)并非固定容量,而是可擴(kuò)展的,在有限的內(nèi)存空間下仍是有滿溢的機(jī)會。
另外,很多時(shí)候,「調(diào)用堆棧溢出」的出現(xiàn)是與遞歸(recursion)相關(guān)的。我們可以把一些遞歸的實(shí)現(xiàn)改為迭代(iteration),但有時(shí)還是必須有一個(gè)自定義的堆棧數(shù)據(jù)結(jié)構(gòu),例如對樹的深度優(yōu)先搜索(Depth-First Search, DFS)。自定義的堆棧也是有溢出的可能。
所以,雖然堆棧溢出常指調(diào)用堆棧溢出,但本質(zhì)上也只是一種數(shù)據(jù)結(jié)構(gòu)的滿溢情況。
總結(jié)
以上是生活随笔為你收集整理的python读取文件数据堆栈溢出的原因_堆栈溢出一般是什么原因?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xp做打印服务器 找不到驱动,XP系统安
- 下一篇: websocket python爬虫_p