我最近开始研究分配器和 c++17 中引入的新 pmr。
查看 cppreference 上 std::pmr::new_delete_resouce 的定义,我读到以下内容:
返回一个指向使用全局运算符new和运算符delete来分配内存的memory_resource的指针。
这个“全球”让我有点困惑。这是什么意思?它只是指操作员的正常调用吗?
int* i = new int;
delete i;
因此在堆上分配东西,还是指分配全局变量的静态内存?
在这两种情况下使用这种结构有何意义?
operator new/delete可以针对特定类型进行覆盖,因此,如果您调用new T,系统将调用与 专门关联的内存分配器函数T。
然而,低级内存分配函数仍然存在。这些函数是全局函数。因此,当该文本说它正在调用“全局运算符 new”时,它的字面意思是:该operator new函数是全局的,而不是特定于特定类型的。
该函数也可以由用户提供,但这会影响尝试调用它的所有操作。
在这两种情况下使用这种结构有何意义?
要点是......您想使用全局内存分配函数为容器分配器分配内存。std::allocator毕竟,这就是事实。
PMR 内存资源是一种允许分配机制不属于容器类型的一部分的方法。因此任何人都vector<T, pmr::polymorphic_allocator>可以使用任何特定的pmr::memory_resource派生类来分配其内存。
| 归档时间: | 
 | 
| 查看次数: | 897 次 | 
| 最近记录: |