【问题标题】:how does std::pmr::memory_resource makes performance difference with std::container?std::pmr::memory_resource 如何与 std::container 产生性能差异?
【发布时间】:2020-10-11 08:58:32
【问题描述】:

例如std::pmr::vector<int>l1 比普通vector<int> l2 快。怎么样?

主要区别是什么?它与智能指针有何不同?

【问题讨论】:

  • 它们是完全正交的概念。 PMR 是一个分配器系统,而不是 RAII 系统。这是一个相当大的主题;你可能想watchthesevideos。他们很好地概述了 PMR 和相关技术。
  • 谢谢@ravnsgaard,但我主要关心的是性能,pmr 不是某种不同的内存,对吧?它是一种内存管理技术,对吧?
  • 它更类似于内存池。你可以让你的容器在内存中分配对象你决定在哪里。如果您知道您通常只需要分配一定数量的对象,您可以使用本地堆栈作为内存并完全避免动态分配。我建议观看上面的第一个视频。不到十分钟,只谈典型用法。

标签: c++ memory-management stl c++17


【解决方案1】:

template <typename T> std::pmr::vector<T> 是template <typename T> std::vector<T, std::pmr::polymorphic_allocator<T>> 的别名。 唯一的运行时差异在于它如何为元素分配和取消分配内存。

std::pmr::vector的优点是不同的分配策略没有不同的类型,所以可以有one函数void frobnicate(const std::pmr::vector<int> &);,而不是multiple@987654325 @,如果您的程序的不同部分有不同的分配要求。

缺点是类型擦除(通常)有一些开销。

如果你只使用一个分配器(例如默认的 std::allocator),那么使用 std::pmr 是没有意义的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多