标准C++17
包括一个新的命名空间pmr
,其中包括一组以memory_resource
的名称分组的类。
在互联网上搜索之后,我发现很少有关它的粗俗信息,直接的结果就是这个问题:
pmr
,尤其是pmr::memory_resource
背后的主要思想是什么?
详细说明问题,我脑海中的一些问号是:
allocator
有什么区别? allocator
? (例如,出于测试目的)内容:
为了创建
memory pool
分配器,我找到了有关此命名空间的信息。读取诸如pool_options
或polymorphic_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_resource
和monotonic_buffer_resource
作为类型,或者std::pmr::new_delete_resource()
/std::pmr::null_memory_resource()
。假设您要使用与
std::pmr
中提供的5种策略不同的策略来分配内存。然后,创建一个从std::pmr::memory_resource
继承的类,并将其传递给使用polymorphic_allocator
的容器。