棧:全稱是執行緒堆疊,英文 stack
堆:全稱是託管堆,英文heap
棧:是編譯期間就分配好的記憶體空間,是由作業系統分配和釋放;
值型別存在棧上如:整數、字元、結構、布林、列舉等
堆:是程式執行期間動態分配的記憶體空間,是由程式設計師分配和釋放(人為的)
引用型別儲存在堆上如:類、介面、陣列等
區別:1、申請大小的不同:棧獲得的空間較小,而堆獲得的空間較大。
2、申請效率的不同:棧由系統自動分配,速度較快,而堆一般速度比較慢。
3、儲存內容的不同:棧在函式呼叫時,函式呼叫語句的下一條可執行語句的位址第乙個進棧,然後函式的各個引數進棧,其中靜態變數是不入棧的。
而堆一般是在頭部用乙個位元組存放堆的大小,堆中的具體內容是人為安排。
4、底層不同:棧是連續的空間,而堆是不連續的空間。
堆和棧區別
一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os回 收 注意它...
堆和棧區別
管理方式 棧由編譯器自動管理 堆由程式設計師控制,使用方便,但易產生記憶體洩露。生長方向 棧向低位址擴充套件 即 向下生長 是連續的記憶體區域 堆向高位址擴充套件 即 向上生長 是不連續的記憶體區域。這是由於系統用鍊錶來儲存空閒記憶體位址,自然不連續,而鍊錶從低位址向高位址遍歷。空間大小 棧頂位址和...
堆和棧區別
一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os回 收 注意它...