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

  • 3218
  • 0
  • c#
  • 2019-04-29

前文:

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

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

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

.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 的空間要自己回收

c++ = free()   
c = malloc()

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

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

真的是太幸福啦~~

 

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

 

 參考文章

執行時期儲存兩大要角


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