C# 程式基礎--執行階段的記憶體配置方式 Stack、Heap

莊創偉
2 min readJul 25, 2018

--

大部分的OOP語言(物件導向)記憶體配置方式分為Stack、Heap

  1. Stack
    靜態配置,擁有後進先出的特性。Value Type(實值型別 ex: int、char)、函數(function )等等,有明確生命週期。由於有可預測性,所以會在使用完畢後會自行回收記憶體空間。
    如function 結束後function內創建的實體型別(宣告為區域變數則不會被回收)記憶體便會自行釋放。
  2. Heap
    動態配置,要直到創建時才會配置記憶體,如參考型別(Reference Type),如Class 、object,基本上非實質型別的多為參考型別。由於不可預測生命週期,須自行回收使用的記憶體(看所用程式語言是否有自動回收的機制)。
    如function 執行完成後 所創建的物件可能仍存於記憶體中需自行dispose掉。(C#會自行釋放)。
    由於需自行回收若回收機制不完全,則會隨著程式運行時間逐漸吃光記憶體。
  3. Gobal
    全域配置。存放全域變數,宣告為static 靜態變數或config中的設定值。編譯時期會優先配置。程式結束時釋放。由於優先配置與無存活週期的特性,使用全域可以調高程式效率,但是會導致程式一啟動便耗用大量的記憶體空間。

--

--

莊創偉

學海無涯。但是為了生計還是得下海的風塵男子