`memory_resource`的目的和用法是什么?

时间:2017-06-28 09:58:36

标签: c++ c++17 allocator

标准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?

1 个答案:

答案 0 :(得分:7)

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

创建polymorphic_allocator的唯一方法是:

  1. 默认构造,在这种情况下,它使用std::pmr::get_default_resource()返回值,即memory_resource*

  2. 将其传递给memory_resource*

  3. 从另一个polymorphic_allocator复制。

因此,polymorphic_allocator的定制点是创建一个继承自memory_resource的类,并使用预先声明的{{1在memory_resource中定义的}}:(std::pmr unsynchronized_pool_resource作为类型,或monotonic_buffer_resource / std::pmr::new_delete_resource()

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