堆與棧的區別

2021-05-01 07:45:34 字數 357 閱讀 1426

棧(stack)是按後進先出(lifo)原則儲存資料項的一種資料結構。在計算機系統中,棧特指處理器支援的一塊記憶體區域,其中保持著區域性變數。棧中記憶體的分配為向下生長。

c#中,值型別(如整數型別)就分配在棧中,棧記憶體區域內儲存著值型別的值,記憶體區域可以通過變數名來引用。

引用型別(如object)分配在堆中(heap)。堆是為物件分配空間的記憶體區域。物件分配在堆中時,返回的是位址,位址被賦值給引用。堆中記憶體分配為向上生長。

棧中的物件在超出作用域(棧幀)時,將被銷毀。通常棧幀(stack frame)是由乙個函式定義的,如果在函式宣告了乙個區域性變數,放在棧中的物件將在函式結束時銷毀。

堆中的物件會在指向它的最後乙個引用銷毀後被**。

堆與棧區別

檢視文章 關於記憶體中棧和堆的區別 2008 09 02 17 12 1 記憶體分配方面 堆 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式是類似於鍊錶。可能用到的關鍵字如下 new malloc delete free等等。棧 由編譯器...

棧 與 堆 的區別

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

堆與棧的區別

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