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

What is the purpose and usage of `memory_resource`?

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

上网查了一下,发现很少有关于它的庸俗资料,直接的结果就是这个问题:

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


问题再详细一点,我脑子里的一些问号是:


上下文:

为了创建 memory pool 分配器,我找到了有关此命名空间的信息。阅读像 pool_optionspolymorphic_allocator 这样的名字引起了我的注意。


相关问题:

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

创建 polymorphic_allocator 的唯一方法是:

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

  2. 传一个memory_resource*.

  3. 复制自另一个 polymorphic_allocator.

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

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

的容器