程式執行記憶體 堆和棧

2022-05-06 03:15:12 字數 1047 閱讀 7909

程式執行時,它的資料必須儲存在記憶體中。乙個資料項需要多大的記憶體、儲存在什麼地方、以及如何儲存都依賴與該資料項的型別。

執行整的程式使用兩個記憶體區域來儲存資料:堆和棧。

棧:系統接管所有的棧的操作。作為 程式設計師,不需要顯示的對它做任何事情。但了解棧的基本功能可以更好的了解程式在執行時正在做什麼。

棧是乙個記憶體陣列,是乙個lipo(last-in first-out,先進後出)的資料結構。棧儲存的幾種資料型別:

一般值型別都存放在棧中。

某些型別變數的值:例如int double 結構型別和列舉型別等

程式當前的執行環境;

傳遞給方法的引數。

棧的特徵:

棧有如下幾個普通特徵:

資料只能從棧頂端插入和刪除;

把資料放到站頂稱為入棧(push);

從棧頂刪除資料稱為出棧(pop)。

堆:

對是一塊記憶體區域,在隊裡可以分配大塊的記憶體用於儲存某些類相關的資料。與棧不同,堆裡的記憶體可以任意存入和移除。

接下來的圖展示了乙個在堆裡放了4項資料的程式。

堆裡存放的型別是引用值型別:包括陣列、介面、類等~

雖然程式可以再堆裡儲存資料,但並不能顯示的刪除它們。clr的自動gc(garbage collector,垃圾收集器)在判斷出程式的**將不會再訪問某資料項時,自動清除無助的堆物件。我們因此可以不再操心這項使用其他程式語言時非常容易出錯的工作了。

此圖闡明了垃圾收集過程:

好了,棧和堆我就先介紹這麼多了,畫了半天的圖,真心不好受啊~~~~~~

堆記憶體和棧記憶體

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

堆記憶體和棧記憶體

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

棧記憶體和堆記憶體

在平時寫 的時候經常遇到一些很簡單但是自己卻不太理解的問題,於是整理了一下。記憶體 一般情況下我們分為棧記憶體和堆記憶體。下面我們來說說它們的區別。一 棧記憶體 用於儲存區域性變數,當資料用完的時候,它所占用的空間會自動釋放。public class demo1 return j i 這裡的 i j...