`memory_resource` 的用途和用法是什么?
What is the purpose and usage of `memory_resource`?
标准 C++17
包括一个新的命名空间 pmr
,其中包含一组 类,这些命名空间以 memory_resource
的名称分组。
上网查了一下,发现很少有关于它的庸俗资料,直接的结果就是这个问题:
pmr
尤其是 pmr::memory_resource
背后的主要思想是什么?
问题再详细一点,我脑子里的一些问号是:
- 它带来了什么新东西,或者它解决了哪些限制?
- 和
allocator
有什么区别?
- 多态是否意味着可以 select 运行时提供给容器构造函数的
allocator
? (例如用于测试目的)
- 它对实现内存池或其他内存管理方案有帮助吗?
上下文:
为了创建 memory pool
分配器,我找到了有关此命名空间的信息。阅读像 pool_options
或 polymorphic_allocator
这样的名字引起了我的注意。
相关问题:
polymorphic_allocator
旨在让您拥有一个行为在运行时动态确定的分配器。
创建 polymorphic_allocator
的唯一方法是:
默认构造,在这种情况下它使用 std::pmr::get_default_resource()
return 值,即 memory_resource*
.
传一个memory_resource*
.
复制自另一个 polymorphic_allocator
.
因此 polymorphic_allocator
的自定义点是创建一个继承自 memory_resource
的 class 并实现其方法, 或 使用在 std::pmr
中定义的预先声明的 memory_resource
之一:(un
)synchronized_pool_resource
和 monotonic_buffer_resource
作为类型,或 std::pmr::new_delete_resource()
/ std::pmr::null_memory_resource()
.
假设您希望使用与 std::pmr
中提供的 5 不同的策略分配内存。然后你创建一个继承自 std::pmr::memory_resource
的 class,并将其传递给使用 polymorphic_allocator
.
的容器
标准 C++17
包括一个新的命名空间 pmr
,其中包含一组 类,这些命名空间以 memory_resource
的名称分组。
上网查了一下,发现很少有关于它的庸俗资料,直接的结果就是这个问题:
pmr
尤其是 pmr::memory_resource
背后的主要思想是什么?
问题再详细一点,我脑子里的一些问号是:
- 它带来了什么新东西,或者它解决了哪些限制?
- 和
allocator
有什么区别? - 多态是否意味着可以 select 运行时提供给容器构造函数的
allocator
? (例如用于测试目的) - 它对实现内存池或其他内存管理方案有帮助吗?
上下文:
为了创建 memory pool
分配器,我找到了有关此命名空间的信息。阅读像 pool_options
或 polymorphic_allocator
这样的名字引起了我的注意。
相关问题:
polymorphic_allocator
旨在让您拥有一个行为在运行时动态确定的分配器。
创建 polymorphic_allocator
的唯一方法是:
默认构造,在这种情况下它使用
std::pmr::get_default_resource()
return 值,即memory_resource*
.传一个
memory_resource*
.复制自另一个
polymorphic_allocator
.
因此 polymorphic_allocator
的自定义点是创建一个继承自 memory_resource
的 class 并实现其方法, 或 使用在 std::pmr
中定义的预先声明的 memory_resource
之一:(un
)synchronized_pool_resource
和 monotonic_buffer_resource
作为类型,或 std::pmr::new_delete_resource()
/ std::pmr::null_memory_resource()
.
假设您希望使用与 std::pmr
中提供的 5 不同的策略分配内存。然后你创建一个继承自 std::pmr::memory_resource
的 class,并将其传递给使用 polymorphic_allocator
.