堆和棧的區別

2022-10-11 12:36:09 字數 416 閱讀 9688

棧:全稱是執行緒堆疊,英文 stack

堆:全稱是託管堆,英文heap

棧:是編譯期間就分配好的記憶體空間,是由作業系統分配和釋放;

值型別存在棧上如:整數、字元、結構、布林、列舉等

堆:是程式執行期間動態分配的記憶體空間,是由程式設計師分配和釋放(人為的)

引用型別儲存在堆上如:類、介面、陣列等

區別:1、申請大小的不同:棧獲得的空間較小,而堆獲得的空間較大。

2、申請效率的不同:棧由系統自動分配,速度較快,而堆一般速度比較慢。

3、儲存內容的不同:棧在函式呼叫時,函式呼叫語句的下一條可執行語句的位址第乙個進棧,然後函式的各個引數進棧,其中靜態變數是不入棧的。

而堆一般是在頭部用乙個位元組存放堆的大小,堆中的具體內容是人為安排。

4、底層不同:棧是連續的空間,而堆是不連續的空間。

堆和棧區別

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

堆和棧區別

管理方式 棧由編譯器自動管理 堆由程式設計師控制,使用方便,但易產生記憶體洩露。生長方向 棧向低位址擴充套件 即 向下生長 是連續的記憶體區域 堆向高位址擴充套件 即 向上生長 是不連續的記憶體區域。這是由於系統用鍊錶來儲存空閒記憶體位址,自然不連續,而鍊錶從低位址向高位址遍歷。空間大小 棧頂位址和...

堆和棧區別

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