C# - 記憶體管理 (Stack, Heap)
| 2025-5-9
字數 493閱讀時間 2 分鐘
notion image

1. 堆疊(Stack)

  • 簡介
    • Stack 是一種後進先出(LIFO)的資料結構,儲存方法中的本地變數和參數。
    • 它的大小通常較小,且是 快速 分配與釋放記憶體的地方。當一個方法被呼叫時,它的本地變數會被推入堆疊,當方法執行完畢,這些變數就會被彈出並釋放記憶體。
  • 特性
    • 記憶體管理由系統自動處理,無需顯式釋放。
    • 變數的生命週期只限於當前方法或區塊。
    • 所有的變數 (不管是實值型別或是參考型別),其內容 (變數名稱、型別與值) 都是儲存在 Stack 中。
    • 實值型別 (Value Type) 變數儲存的內容是「實值」。
    • 參考型別 (Reference Type) 變數儲存的內容是「參考」
  • 限制
    • 大小有限,超過大小會引發 StackOverflowException
    • 只能儲存大小已知且固定的資料。

2. 堆積(Heap)

  • 簡介
    • Heap 是一塊較大的記憶體區域,用來儲存 參考型別(如 classstringarray 等)物件。
    • 堆積中的記憶體分配比堆疊慢,但它提供更大的彈性,可以動態地分配和釋放記憶體。
  • 特性
    • 儲存的是 參考型別的實例,當一個物件被創建時,它會在堆積中分配空間,並且由 GC(垃圾回收器)來管理物件的生命週期。
    • 當物件不再被參考時,GC 會自動清理該物件佔用的記憶體。
  • 限制
    • 記憶體分配較慢,比堆疊更容易出現 記憶體碎片化
    • 需要管理記憶體回收。
Loading...