Ответ
Куча (heap) — это область динамически выделяемой памяти, используемая для хранения объектов с неопределённым или долгим временем жизни. В контексте C# и .NET:
- Хранение ссылочных типов: Все экземпляры классов, массивы и другие ссылочные типы размещаются в управляемой куче.
- Управление через Garbage Collector (GC): Память в куче автоматически освобождается сборщиком мусора, когда объекты больше не достижимы из корней приложения (например, из стека или статических полей).
- Контраст со стеком: В отличие от стека (для небольших, короткоживущих значений и локальных переменных), куча предназначена для данных, которые должны пережить вызов метода, где они были созданы.
Пример создания объекта в куче:
// Объект 'person' создаётся в управляемой куче.
// Ссылка на него хранится в переменной в стеке (если это локальная переменная).
var person = new Person { Name = "Alice", Age = 30 };
Практические следствия:
- Производительность: Аллокация и доступ к памяти в куче медленнее, чем в стеке.
- Фрагментация: Длительная работа приложения может привести к фрагментации кучи, хотя GC старается это минимизировать.
- Использование: Куча — фундаментальная часть модели памяти .NET для большинства объектов приложения.