标准C++17包括一个新的命名空间pmr,其中包括一组以memory_resource的名称分组的类。

在互联网上搜索之后,我发现很少有关它的粗俗信息,直接的结果就是这个问题:

pmr,尤其是pmr::memory_resource背后的主要思想是什么?

详细说明问题,我脑海中的一些问号是:

  • 它带来了什么新东西,或者解决了哪些限制?
  • allocator有什么区别?
  • 多态是否意味着可以选择运行时提供给容器构造函数的allocator? (例如,出于测试目的)
  • 它有助于实现内存池或其他内存管理方案吗?


  • 内容:

    为了创建memory pool分配器,我找到了有关此命名空间的信息。读取诸如pool_optionspolymorphic_allocator之类的名称引起了我的注意。

    相关问题:

    polymorphic_allocator: when and why should I use it?

    最佳答案

    polymorphic_allocator旨在让您拥有一个分配器,其行为在运行时动态确定。

    创建polymorphic_allocator的唯一方法是:

  • 默认构造,在这种情况下,它使用std::pmr::get_default_resource()返回值,即memory_resource*
  • 传递一个memory_resource*
  • 从另一个polymorphic_allocator复制。

  • 因此,定制polymorphic_allocator的要点是创建一个从memory_resource继承的类并实现其方法,或者使用memory_resource中定义的预先声明的std::pmr之一:(un)synchronized_pool_resourcemonotonic_buffer_resource作为类型,或者std::pmr::new_delete_resource()/std::pmr::null_memory_resource()

    假设您要使用与std::pmr中提供的5种策略不同的策略来分配内存。然后,创建一个从std::pmr::memory_resource继承的类,并将其传递给使用polymorphic_allocator的容器。

    08-17 04:58