.Net 三種區塊記憶體位置 Heap , Stack , Globle??

前文:

寫.Net 寫一陣子了 突然覺得一些基本功好重要

之前都沒發現原來.Net 有三種區塊的記憶體空間

這三個區域都有他們各自的含義….

</div>

.Net 有三種區塊的記憶體空間

Globle:

  1. 全域記憶體
  2. 主要存放全域變數或宣告為static的靜態變數

Heap :

  1. 存放參考類型(可動態產生的空間)
  2. 運行期間分配記憶體位置(這就是為什麼參考類型的類別要new)
  3. 基本是Class關鍵字

自定義型別都為參考類型,new 動態分配記憶體空間

Stack :

  1. 存放值類型的值(int,double,float,byte …..)
  2. 存放參考類型記憶體位置(Pointer指針)
  3. 編譯期間就知道運行時的記憶體位置

何謂動態配置記憶體?

HeapStack記憶體使用狀況可想像成

我們可以看到如果是參考類型物件,在 new 時動態配置一塊記憶體位置並讓 Stack 使用物件指向他.

值得一提 動態配置的記憶體空間基本上都是要自行回收的

例如 C++ 和 C 自己new 的空間要自己回收

1
2
c++ = free()
c = malloc()

但C#和Java因為有GC (拉機回收器)

幫我們去檢查沒有用到的Heap記憶體位置並幫我們回收

真的是太幸福啦~~

想要深入了解 Heap和Stack使用差異的小伙伴可以點入 Struct V.S Class 兩者之間差異

參考文章

執行時期儲存兩大要角

此文作者:Daniel Shih(石頭)
此文地址https://isdaniel.github.io/heap-stack-globle/
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!


如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^