Сколько куч (heap) может быть в одном процессе?

«Сколько куч (heap) может быть в одном процессе?» — вопрос из категории Управление памятью, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В одном процессе может существовать несколько куч. По умолчанию создается одна основная куча процесса (default heap), но разработчик может создавать дополнительные кучи с помощью системных API, например, функции HeapCreate в Windows. Это используется для изоляции данных разных компонентов, оптимизации управления памятью под специфические паттерны аллокации или для уменьшения фрагментации.

Пример создания кучи в C/C++:

#include <windows.h>

int main() {
    // Создание новой кучи с динамическим размером
    HANDLE hHeap = HeapCreate(0, 0, 0);
    if (hHeap != NULL) {
        // Выделение памяти в новой куче
        int* pArray = (int*)HeapAlloc(hHeap, 0, 100 * sizeof(int));
        // ... работа с памятью
        HeapFree(hHeap, 0, pArray);
        HeapDestroy(hHeap);
    }
    return 0;
}

В среде .NET управляемые объекты размещаются в специальной управляемой куче (managed heap), которая внутренне управляется сборщиком мусора (GC) и отделена от неуправляемых куч, созданных через WinAPI. Количество куч ограничивается доступной виртуальной памятью и системными ресурсами.