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