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 подскажет развёрнутый ответ в реальном времени.