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

Adr*_*ire 19 c++ allocator c++17

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

在网上搜索后,我发现很少有关于它的庸俗信息,直接后果是这个问题:

背后的主要思想pmrpmr::memory_resource什么?


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

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

语境:

在创建memory pool分配器的过程中,我找到了有关此命名空间的信息.读名字pool_options或者polymorphic_allocator引起我的注意.


相关问题:

polymorphic_allocator:何时以及为什么要使用它?

Yak*_*ont 7

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

创建a的唯一方法polymorphic_allocator是:

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

  2. 通过它memory_resource*.

  3. 从另一个复制polymorphic_allocator.

因此,a的定制点polymorphic_allocator是创建一个继承memory_resource并实现其方法的类,或者使用memory_resourcestd::pmr(un)中定义的预先声明的s之一synchronized_pool_resource以及monotonic_buffer_resource作为类型或std::pmr::new_delete_resource()/ std::pmr::null_memory_resource().

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