首页 > 解决方案 > 了解 std::pmr::new_delete_resource

问题描述

我最近开始研究分配器和 c++17 中引入的新 pmr。

查看 cppreference 上 std::pmr::new_delete_resouece 的定义,我读到以下内容:

返回一个指向 memory_resource 的指针,该指针使用全局 operator new 和 operator delete 来分配内存。

那个“全球”让我有点困惑。这是什么意思?它只是指像in这样的操作员的正常调用吗

int* i = new int;
delete i;

因此在堆上分配东西,还是指分配全局变量的静态内存?

在这两种情况下使用这种结构有什么意义?

标签: c++c++17c++pmr

解决方案


operator new/delete可以针对特定类型进行覆盖,这样如果你调用new T,系统将调用专门关联的内存分配器函数T

但是,低级内存分配功能仍然存在。这些函数是全局函数。因此,当该文本说它正在调用“全局运算符 new”时,它的字面意思是:operator new全局函数,而不是特定于特定类型的函数。

这个函数可以是用户提供的,但这会影响所有试图调用它的操作。


在这两种情况下使用这种结构有什么意义?

关键是......您想使用全局内存分配函数为容器分配器分配内存。std::allocator毕竟,就是这样。

PMR 内存资源是一种允许分配机制属于容器类型的方法。因此任何人vector<T, pmr::polymorphic_allocator>都可以使用任何特定pmr::memory_resource的派生类来分配其内存。


推荐阅读