什么是堆栈?
?????? 很顯然,堆與棧映射了人類社會(huì)的許多現(xiàn)象。比如超市的食品柜臺(tái)和路邊飲料販賣機(jī)的存取順序,為了防止過期,總是將新進(jìn)貨放在最里面,外側(cè)的食物被顧客不斷拿取:這就是堆。再想象一個(gè)小朋友用來存放糖果的長長的抽屜,無論拿糖還是放糖都習(xí)慣在抽屜的最外側(cè)操作,久之,里面的糖果就過期了:這是棧。顯然“堆”在人類社會(huì)中更“合理”些。
?????? 如此看來,數(shù)據(jù)棧只能在一端(稱為棧頂(top))對數(shù)據(jù)項(xiàng)進(jìn)行插入和刪除,而數(shù)據(jù)堆可以從兩端同時(shí)操作。因此棧的特性是嚴(yán)格,有序,規(guī)范。相反,堆就是自由,靈活,隨意的。但是堆與棧的共通之處在于,數(shù)據(jù)的讀寫不根據(jù)內(nèi)存地址,而是根據(jù)寫入的順序決定讀出的順序。所以,這種獨(dú)特的緩存機(jī)制雖要求每個(gè)數(shù)據(jù)單元的大小等價(jià),卻提供了高速讀寫數(shù)據(jù)的能力。
??????1.計(jì)算機(jī)/網(wǎng)絡(luò)設(shè)備中的緩存堆。所謂緩存可以視作臨時(shí)存儲(chǔ)的一個(gè)緩沖區(qū)(cache),交換機(jī)和路由器都自帶這種緩存區(qū),當(dāng)網(wǎng)線帶寬的吞吐量超過cpu的計(jì)算速度時(shí),溢出的數(shù)據(jù)就會(huì)被安置在緩存里,以“堆積”的形式“排隊(duì)”等候被處理。它的靈活之處在于,緩存容量大小可以調(diào)整,既可以手動(dòng)靜態(tài)指定也可以程序動(dòng)態(tài)分配。它的高效在于比普通內(nèi)存的速度快許多。
??????2.高級程序語言。一個(gè)由C/C++編譯的程序占用的內(nèi)存分為以下幾個(gè)部分:棧區(qū),堆區(qū),靜態(tài)區(qū),常量區(qū),程序代碼區(qū)。當(dāng)C語言函數(shù)被調(diào)用時(shí),堆棧區(qū)會(huì)由編譯器或程序員分配釋放,用來存放函數(shù)的參數(shù)名,局部變量等。在java中,棧與堆都是被用來在RAM中存放數(shù)據(jù)的地方,與C++不同,Java自動(dòng)管理?xiàng):投?#xff0c;程序員不能直接地設(shè)置棧或堆。
??????3.MPLS(多協(xié)議標(biāo)簽交換)中的標(biāo)簽棧。在mpls vpn中,棧底標(biāo)簽和棧頂標(biāo)簽由不同協(xié)議分配分發(fā),被用來準(zhǔn)確地鎖定兩端的BGP路由器以及中間的標(biāo)簽交換路徑。BGP分配的棧底標(biāo)簽最終由對端的BGP彈出,ldp分配的棧頂標(biāo)簽則是“后進(jìn)先出”的標(biāo)簽,就像C語言中if語句與else語句之間的等價(jià)對應(yīng)匹配的規(guī)則一樣。
?
轉(zhuǎn)載于:https://www.cnblogs.com/jinhengyu/p/7517191.html
總結(jié)
- 上一篇: Linux下源码安装CodeBlocks
- 下一篇: Codeforces 697C Lore