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