Mediummemory-poolallocators

Что такое memory pool и зачем?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Memory pool — предвыделенный блок памяти, из которого выдаются куски. Решает проблемы malloc/new: фрагментацию, overhead на заголовок (8–16 байт на allocation), latency для real-time.

// Frame arena: bump allocator, mass free за O(1)
struct Arena {
    char buf[1 << 20];
    size_t pos = 0;
    char* alloc(size_t n) {                      // O(1), no fragmentation
        char* p = buf + pos; pos += n; return p;
    }
    void reset() { pos = 0; }                    // освободить всё сразу
};
  • fixed-size pool — блоки одинакового размера, O(1);
  • arena / bump allocator — последовательное выделение, mass free;
  • object pool — переиспользование через placement new.

Применяют через custom allocator (std::vector<T, PoolAlloc<T>>) или перегрузку operator new. tcmalloc, jemalloc — быстрее стандартного под многопоточной нагрузкой.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.