🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

.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 許可協議。轉載請註明出處!

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