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