這篇文章將為大家詳細講解有關內(nèi)存技術中堆棧溢出原理是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供新市網(wǎng)站建設、新市做網(wǎng)站、新市網(wǎng)站設計、新市網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、新市企業(yè)網(wǎng)站模板建站服務,十余年新市做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。堆棧(Stack)是一種抽象數(shù)據(jù)結構,是一組相同數(shù)據(jù)類型的組合,所有的操作均在堆棧頂端進行,具有“后進先出”的特性,即最后一個放入堆棧中的物體總是被最先拿出來。堆棧中兩個最重要的是PUSH(進棧)和POP(出棧),PUSH操作在堆棧的頂部加入一個元素,POP操作相反,在堆棧頂部移去一個元素,并將堆棧的大小減一。水滿則溢,堆棧是有一定容量限制的,當超出了該容量限制,就會發(fā)生溢出。
堆棧溢出是什么
內(nèi)存中的堆與棧
事實上,堆和棧是不同的數(shù)據(jù)結構概念,堆棧溢出也可細化為堆溢出和棧溢出兩種。棧有兩個特性:只能從棧的頂端存取數(shù)據(jù);數(shù)據(jù)的存取符合后進先出的原則。所謂后進先出,其實就如同自助餐中餐盤在桌面上一個一個往上疊放,在取用時先拿最上面的餐盤,這是典型的堆棧概念的應用。堆是一種樹結構,準確地說是一個完全二叉樹。
在內(nèi)存中,當一個可執(zhí)行程序被裝入到內(nèi)存時,主要包括兩個部分:代碼和數(shù)據(jù)。代碼會被裝入到內(nèi)存中的代碼區(qū),數(shù)據(jù)區(qū)又由3部分組成:①全局變量:根據(jù)其是否有初始值,被裝入到內(nèi)存中的未初始化數(shù)據(jù)區(qū)和初始化數(shù)據(jù)區(qū);②局部變量:在函數(shù)調(diào)用發(fā)生時存放在棧中;③動態(tài)內(nèi)存空間:在程序運行時申請的動態(tài)內(nèi)存空間存放在堆中。
棧區(qū)(stack)是后進先出的結構,向低地址進行擴展,是一塊連續(xù)的內(nèi)存區(qū)域,棧頂?shù)牡刂泛蜅5妮^大容量是系統(tǒng)預先規(guī)定的,只要棧的剩余空間大于所申請空間,系統(tǒng)將為程序提供內(nèi)存,否則將報異常來提示棧發(fā)生溢出。??臻g是系統(tǒng)自動分配、釋放的,存放函數(shù)的參數(shù)值、局部變量的值等。一般來說,進棧的順序首先為主函數(shù)中的下一條指令(函數(shù)調(diào)用語句的下一條可執(zhí)行語句)的地址先進棧,其次是參數(shù)由右往左依次進棧,最后是函數(shù)中的局部變量進棧,出棧順序與進棧順序相反,對于程序來說,出棧就意味著函數(shù)執(zhí)行完畢,函數(shù)空間將被系統(tǒng)完全釋放掉。
堆區(qū)一般由程序員自己申請,并指明大小,程序最后進行釋放,若程序員不釋放,程序結束時可能由操作系統(tǒng)回收(注意,如果是C/C++語言,程序不進行對空間回收,而Java語言中有專門的垃圾回收器進行回收),堆區(qū)與數(shù)據(jù)結構中的堆有所不同,分配方式類似于鏈表。堆區(qū)向高地址擴展。
堆棧溢出原理
堆棧溢出是說堆區(qū)和棧區(qū)的溢出,二者同屬于緩沖區(qū)溢出。從上面關于堆區(qū)和棧區(qū)的解釋可以看出,一旦程序確定,堆棧內(nèi)存空間的大小就是固定的,當數(shù)據(jù)已經(jīng)把堆棧的空間占滿時,再往里面存放數(shù)據(jù)就會超出容量,發(fā)生上溢;當堆棧中的已經(jīng)沒有數(shù)據(jù)時,再取數(shù)據(jù)就無法取到了,發(fā)生下溢。需要注意的是,棧分為順序棧和鏈棧,鏈棧不會發(fā)生溢出,順序棧會發(fā)生溢出。
關于“內(nèi)存技術中堆棧溢出原理是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
文章標題:內(nèi)存技術中堆棧溢出原理是什么-創(chuàng)新互聯(lián)
鏈接地址:http://aaarwkj.com/article36/dspppg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、全網(wǎng)營銷推廣、品牌網(wǎng)站建設、網(wǎng)站營銷、網(wǎng)頁設計公司、營銷型網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)