
1. 堆疊(Stack)
- 簡介:
- Stack 是一種後進先出(LIFO)的資料結構,儲存方法中的本地變數和參數。
- 它的大小通常較小,且是 快速 分配與釋放記憶體的地方。當一個方法被呼叫時,它的本地變數會被推入堆疊,當方法執行完畢,這些變數就會被彈出並釋放記憶體。
- 特性:
- 記憶體管理由系統自動處理,無需顯式釋放。
- 變數的生命週期只限於當前方法或區塊。
- 所有的變數 (不管是實值型別或是參考型別),其內容 (變數名稱、型別與值) 都是儲存在 Stack 中。
- 實值型別 (Value Type) 變數儲存的內容是「實值」。
- 參考型別 (Reference Type) 變數儲存的內容是「參考」
- 限制:
- 大小有限,超過大小會引發 StackOverflowException。
- 只能儲存大小已知且固定的資料。
2. 堆積(Heap)
- 簡介:
- Heap 是一塊較大的記憶體區域,用來儲存 參考型別(如
class
、string
、array
等)物件。 - 堆積中的記憶體分配比堆疊慢,但它提供更大的彈性,可以動態地分配和釋放記憶體。
- 特性:
- 儲存的是 參考型別的實例,當一個物件被創建時,它會在堆積中分配空間,並且由 GC(垃圾回收器)來管理物件的生命週期。
- 當物件不再被參考時,GC 會自動清理該物件佔用的記憶體。
- 限制:
- 記憶體分配較慢,比堆疊更容易出現 記憶體碎片化。
- 需要管理記憶體回收。