什麼是堆疊 堆和棧有什麼不同

2023-06-09 13:40:08 字數 3010 閱讀 7945

1樓:一隻宅豆

在片內ram中,常常要指定一個專門的區域來存放某些特別的資料,它遵循順序存取和後進先出(lifo/filo)的原則,這個ram區叫堆疊。

子程式呼叫和中斷服務時cpu自動將當前pc值壓棧儲存,返回時自動將pc值彈棧;

保護現場/恢復現場;

資料傳輸。

2樓:一劍出血

堆是堆(heap),棧是棧(stack),雖然堆疊(heap and stack)有相似之處,但不要混為一談。

本質上講,堆(heap)是一種資料結構,是純軟體的實現。堆基於一定的程式基礎(例如在作業系統),它更加偏向於軟體實現動態的記憶體管理,令程式執行時根據所需來動態申請/釋放記憶體。

而棧(stack)既存在軟體實現又存在硬體實現。棧本質上是一種簡單的先進先出結構,主要目的是為程式執行時儲存關鍵的現場資料,尤其適合於(巢狀式)中斷的配合。幾乎所有的微控制器/微處理器都具備硬體棧。

而軟體/作業系統中又可以進一步建立軟體棧,為執行緒建立專用的儲存區域。

3樓:悅怡

臨時寄存貨物的地方。

在計算機領域,堆疊是一個不容忽視的概念,堆疊是一種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端(稱為棧頂(top))對資料項進行插入和刪除。在微控制器應用中,堆疊是個特殊的儲存區,主要功能是暫時存放資料和地址,通常用來保護斷點和現場。

堆疊是一個特定的儲存區或暫存器,它的一端是固定的,另一端是浮動的。對這個儲存區存入的資料,是一種特殊的資料結構。所有的資料存入或取出,只能在浮動的一端(稱棧頂)進行,嚴格按照「後進先出」的原則存取,位於其中間的元素,必須在其棧上部(後進棧者)諸元素逐個移出後才能取出。

堆和棧有什麼不同

4樓:懂視生活

堆與棧是開發人員必須要知道的兩個概念。在理解這兩個概念時,需要放到具體的場景下。因為不同場景下,與棧代表不同的含義。那麼,堆和棧的區別在**呢?一起來看看吧!

堆和棧的區別。

堆(heap)是電腦科學中一類特殊的資料結構的統稱。堆通常是一個可以被看做一棵完全二叉樹的陣列物件。其性質主要有兩點:

1、堆中某個節點的值總是不大於或不小於其父節點的值;2、堆總是一棵完全二叉樹。

棧(stack)又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。

1、空間分配不同:棧由作業系統自動分配釋放,存放函式的引數值,區域性變數的值等,其操作方式類似於資料結構中的棧。而堆一般由程式設計師分配釋放,如果程式設計師不釋放,程式結束時可能由os**,分配方式倒是類似於連結串列。

2、快取方式不同:棧使用的是一級快取,通常被呼叫時處於儲存空間中,呼叫完畢立即釋放;而堆是存放在二級快取中,生命週期由虛擬機器的垃圾**演算法來決定。所以,呼叫這些物件的速度相對來得低一些。

3、資料結構不同:堆的資料結構可以被看成是一棵樹,如堆排序;而棧是一種先進後出的資料結構。

什麼叫堆疊

5樓:

堆和棧是兩個不同的概念。

堆(heap)上分配的記憶體,系統不釋放,而且是動態分配的。棧(stack)上分配的記憶體系統會自動釋放,它是靜態分配的。執行時棧叫堆疊。

棧的分配是從記憶體的高地址向低地址分配的,而堆則相反。由malloc或new分配的記憶體都是從heap上分配的記憶體,從heap上分配的記憶體必須有程式設計師自己釋放,用free來釋放,否則這塊記憶體會一直被佔用而得不到釋放,就出現了「記憶體洩露(memory leak)」。這樣會造成系統的可分配記憶體的越來越少,導致系統崩潰。

堆疊是一種執行「後進先出」演算法的資料結構。

設想有一個直徑不大、一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裡面,可以發現一種規律:

先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以「先進後出」就是這種結構的特點。

堆疊就是這樣一種資料結構。它是在記憶體中開闢一個儲存區域,資料一個一個順序地存入(也就是「壓入——push」)這個區域之中。有一個地址指標總指向最後一個壓入堆疊的資料所在的資料單元,存放這個地址指標的暫存器就叫做堆疊指示器。

開始放入資料的單元叫做「棧底」。資料一個一個地存入,這個過程叫做「壓棧」。在壓棧的過程中,每有一個資料壓入堆疊,就放在和前一個單元相連的後面一個單元中,堆疊指示器中的地址自動加1。

讀取這些資料時,按照堆疊指示器中的地址讀取資料,堆疊指示器中的地址數自動減 1。這個過程叫做「彈出pop」。如此就實現了後進先出的原則。

而堆疊暫存器就是存放堆疊的暫存器。

6樓:匿名使用者

你可以這樣理解:堆疊是一個空間,你可以往其中輸入資料,也可以從其中取出資料,但存取資料有一個規則:(存資料是分先後的),要取出先存進去的資料,必須先把後存進去的資料全取出來。

這就是所謂的後進先出。

你知道網球筒嗎?你每次只能往其中放進一個網球,而你最先取出來的,只能是你最後放進去的那個網球,你要是想取出最底下的那個網球,只能先把其它網球全取出來。

形象地說,網球筒就是堆疊,網球就是資料,你放、取網球的順序就是你存、取資料的順序。

希望我能說得明白。如果你沒見過網球筒,可以**看一下。

ps:在我現有的知識範圍內堆疊就是堆疊暫存器,我們只說堆疊是求簡潔罷了。

7樓:匿名使用者

裡的解釋我已經覺得很形象了。

什麼是堆?什麼是棧翱,什麼是堆?什麼是棧啊?

堆 英語 heap 是電腦科學中一類特殊的資料結構的統稱。堆通常是一個可以被看做一棵樹的陣列物件。棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素...

關於C中堆和堆疊,C 中堆和堆疊有什麼不一樣

在計算機領域,堆疊是一個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆疊其實是兩種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端 稱為棧頂 top 對資料項進行插入和刪除。要點 堆 順序隨意 棧 後進先出 last in first out 編輯本段 堆和棧的區別 一 預備知...

不同頻率的訊號為什麼是不會堆疊的

疊加也沒關係,但自身的波形是不改變的,使用時有一種電路叫濾波,他能使你需要的那個訊號通過而其他的訊號被短路掉 labview中做幾個正弦訊號的疊加怎麼做?如何同時設定取樣率和取樣點數?兩個不同頻率的訊號疊加後頻率是?持續訊號發生器可以設定取樣率的啊,有個sample info,你接了嗎 labvie...