面試題之一 堆疊區別

2021-09-25 06:10:22 字數 746 閱讀 6792

堆疊面試題:

一、 堆疊簡介

棧是編譯器自動申請與分配,程式設計師無法進行控制的順序線性結構,在程式結束時,由系統進行**,堆是一種需要程式設計師手動申請的鍊錶結構,申請的記憶體空間需要程式設計師手動釋放,程式設計師不釋放時系統可能**。

二、 堆疊差別

堆結構上

順序線性結構

鍊錶操作上

由編譯器自動申請分配釋放

程式設計師手動申請釋放

速度上較快

較慢大小

1m~2m

受限於計算機作業系統有效的虛擬記憶體

申請效率

系統自動分配,所以速度較快

較慢儲存內容

進行函式呼叫的時候,第一條進入棧的指令是函式呼叫語句的下一條語句,接著從右到左將引數入棧,最後是函式體內的區域性變數

堆頭部存放了堆的一些記錄(堆的大小)。具體內容由程式設計師決定

三、總結

棧在分配、處理速度上都比較快,但是自由度較小,無法控制,因為都是由編譯器在系 統中事先規劃好,而且棧的空間較小;堆的最大特點就是自由度高,想開闢多大的空間任意開闢(前提是有足夠的虛擬空間),自由度非常大,但是較棧有的速度稍慢,因為在申請空間之後系統要在記錄空閒空間的鍊錶中查詢一塊不小於申請空間的記憶體分配。而這塊申請的空間不一定剛好與申請的空間同等大小,造成碎片化

深刻剖析經典面試題之一 堆和棧的區別

堆 heap 和棧 stack 的區別 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋...

深刻剖析經典面試題之一 堆和棧的區別

堆 heap 和棧 stack 的區別 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋...

資料結構知識 一 堆疊

堆是一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵樹的陣列物件。堆總是滿足下列性質 其中我們會了解到有二叉樹和斐波那契數。其中二叉樹中又有最小堆和最大堆的概念 二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉...