Hardаллокаторыpmr
Чем std::pmr полезен?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
std::pmr (C++17) — polymorphic memory resources во время выполнения. В отличие от шаблонных аллокаторов (где тип — часть типа контейнера), pmr позволяет одному типу std::pmr::vector<int> работать с разными ресурсами в runtime.
#include <memory_resource>
// Локальный arena-буфер для временных данных — очень быстро
char buffer[1024];
std::pmr::monotonic_buffer_resource mbr(buffer, sizeof(buffer));
{
std::pmr::vector<int> v(&mbr); // аллоцирует из buffer, без heap
v.push_back(42);
} // деструктор не освобождает по одному — arena очищается разом- Ресурсы:
monotonic_buffer_resource(быстрый, без освобождения),synchronized/unsynchronized_pool_resource(пулы); - Преимущества: меньше типов (composition контейнеров упрощается), один arena для разных типов;
- Применяется в high-performance вычислениях, парсерах, компиляторах.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.