前文:
寫.Net 寫一陣子了 突然覺得一些基本功好重要
之前都沒發現原來.Net 有三種區塊的記憶體空間
這三個區域都有他們各自的含義….
</div>
.Net 有三種區塊的記憶體空間
Globle:
- 全域記憶體
- 主要存放全域變數或宣告為static的靜態變數
Heap :
- 存放參考類型(可動態產生的空間)
- 運行期間分配記憶體位置(這就是為什麼參考類型的類別要new)
- 基本是Class關鍵字
自定義型別都為參考類型,new 動態分配記憶體空間
Stack :
- 存放值類型的值(int,double,float,byte …..)
- 存放參考類型記憶體位置(Pointer指針)
- 編譯期間就知道運行時的記憶體位置
何謂動態配置記憶體?
Heap跟Stack記憶體使用狀況可想像成
我們可以看到如果是參考類型物件,在 new 時動態配置一塊記憶體位置並讓 Stack 使用物件指向他.
值得一提 動態配置的記憶體空間基本上都是要自行回收的
例如 C++ 和 C 自己new 的空間要自己回收
1 | c++ = free() |
但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 許可協議。轉載請註明出處!