Hardаллокаторы
Чем std::allocator и зачем нужен?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
std::allocator<T> — стандартный аллокатор, инкапсулирующий operator new/delete для контейнеров STL. Контейнеры параметризованы аллокатором.
// Контейнер с кастомным аллокатором
std::vector<int, MyAlloc<int>> v;
// std::pmr (C++17) — полиморфные аллокаторы в runtime
#include <memory_resource>
std::pmr::monotonic_buffer_resource mbr(buffer, sizeof(buffer));
std::pmr::vector<int> v2(&mbr); // аллоцирует из buffer- Custom allocator: pool allocation, shared memory, tracking, debug;
- С C++11
allocator_traitsупростил требования — достаточно key-методы; - С C++17
std::pmr— один тип контейнера работает с разными ресурсами в runtime; - Аллокаторы — продвинутая тема, большинству кода достаточно
std::allocator.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.