Hardпамятьаллокаторы
Что такое std::pmr и polymorphic memory resources?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
std::pmr (C++17) — библиотека полиморфных аллокаторов во время выполнения. В отличие от шаблонных аллокаторов STL (где тип — часть типа контейнера), pmr позволяет одному типу std::pmr::vector<int> работать с разными аллокаторами, передаваемыми в runtime.
// Быстрый arena-буфер для временных данных
char buf[1024];
std::pmr::monotonic_buffer_resource mbr(buf, sizeof(buf));
{
std::pmr::vector<int> v(&mbr); // аллокация из буфера
for (int i = 0; i < 100; ++i) v.push_back(i);
} // освобождает весь буфер разом — без накладных расходов- monotonic_buffer — быстрый, без освобождения, для временных данных;
- synchronized/unsynchronized_pool_resource — пулы под размеры;
- null_memory_resource — всегда бросает (для форсирования heap).
Упрощает composition (вектор векторов с одним ресурсом), замена «templates everywhere».
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.