как std :: pmr :: memory_resource влияет на производительность с std :: container? - PullRequest
0 голосов
/ 21 июня 2020

для примера std::pmr::vector<int>l1 быстрее, чем обычный vector<int> l2. как?

в чем разница? Чем он отличается от умного указателя?

1 Ответ

2 голосов
/ 21 июня 2020

template <typename T> std::pmr::vector<T> - это псевдоним для template <typename T> std::vector<T, std::pmr::polymorphic_allocator<T>>. Различия во времени выполнения только заключаются в том, как он выделяет и освобождает память для элементов.

Преимущество std::pmr::vector заключается в том, что разные стратегии распределения не имеют разных типов, поэтому вы можете иметь один функция void frobnicate(const std::pmr::vector<int> &);, вместо несколько template <typename A> void frobnicate(const std::vector<int, A> &);, если разные части вашей программы имеют разные требования к распределению.

Недостаток есть (обычно) некоторые накладные расходы на стирание типа.

Если вы используете только один распределитель (например, по умолчанию, std::allocator), нет смысла использовать std::pmr

...