c++ - 了解 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;
因此在堆上分配东西,还是指分配全局变量的静态内存?
在这两种情况下使用这种结构有什么意义?
解决方案
operator new/delete
可以针对特定类型进行覆盖,这样如果你调用new T
,系统将调用专门关联的内存分配器函数T
。
但是,低级内存分配功能仍然存在。这些函数是全局函数。因此,当该文本说它正在调用“全局运算符 new”时,它的字面意思是:operator new
全局函数,而不是特定于特定类型的函数。
这个函数也可以是用户提供的,但这会影响所有试图调用它的操作。
在这两种情况下使用这种结构有什么意义?
关键是......您想使用全局内存分配函数为容器分配器分配内存。std::allocator
毕竟,就是这样。
PMR 内存资源是一种允许分配机制不属于容器类型的方法。因此任何人vector<T, pmr::polymorphic_allocator>
都可以使用任何特定pmr::memory_resource
的派生类来分配其内存。
推荐阅读
- github - 使用 github api 下载 github 操作工作流日志
- architecture - 特定于微服务的权限
- sql - 大数据集上 JSON 的 PostgreSQL 索引
- shell - 在 Hive 中声明时如何在变量中调用查询?
- c++ - 规范化用户输入的单词的大小写
- php - 超过 16 个项目时不保留 uksort() 数组顺序
- c# - 复杂请求的 Linq 问题
- r - 错误:安装 papaja 包并更新 R
- c - 如何使用 malloc 在 C 中初始化 char 数组?
- javascript - PHP JavaScript MYSQL:两个带有自动完成功能的搜索文件