内存管理--4.用幻灯片讲解内存分配器Allocator

用幻灯片讲解内存分配器Allocators

Allocators

内存分配器

  • 提供内存分配策略的通用接口
  • 委托给 C++ 运行时:new / delete
  • 使用块内存池管理内存
  • 使用不同大小的块内存池管理内存

为什么用分配器?

  • 将容器逻辑与内存分配策略解耦
  • 速度:内存分配速度慢
  • 确保有足够的内存可用
  • 确保所需的内存布局/更好的局部性等

接口

自定义内存分配器

内存分配委托给new/delete

简单块内存池分配器

块内存池分配器的意思是预先在内存中分配一块或多块内存,在真正需要内存分配时从预留内存块池中再取出可用的块内存。提高动态分配内存的效率,节省分配内存的时间。

可以自定义分配器

std:: 命令空间下的大部分容器都可以自定义内存分配器,除了std::array。

分配器是容器类型的一部分

  • 分配器在运行时无法交换
  • 不同的函数参数

使用内存分配器的方法

推荐:通过 std::allocator_traits

allocator_traits定义了统一访问分配器属性和函数的接口。

多态内存资源分配器(C++17)

C++17 中的多态分配器概念是对标准库中的标准分配器的增强。

它比普通分配器更易于使用,允许容器拥有相同的类型但具有不同的分配器,甚至可以在运行时更改分配器。

std::pmr就是C++17专门为多态内存分配增加的命名空间。

可以在运行时改变的内存资源(std::pmr::monotonic_buffer_resource)(C++17)

pmr::monotonic_buffer_resource 是 C++17 中引入的一种内存资源(memory resource),它是一个单向链表,用于追踪动态分配的内存。

pmr::memory_resource 是pmr::monotonic_buffer_resource以及其他实现的抽象基类。

std::pmr 命令空间的内存资源函数和类(C++17)

  • new_delete_resource 使用全局 operator new 和 operator delete 的内存资源管理器
  • null_memory_resource 不执行任何分配的内存资源管理器
  • get_default_resource 获取默认内存资源管理器
  • set_default_resource 设置默认内存资源管理器
  • synchronized_pool_resource 线程安全的不同块大小内存池的分配和释放(线程安全的内存资源管理器)
  • unsynchronized_pool_resource 线程不安全的不同块大小内存池的分配和释放 (线程不安全的内存资源管理器)
  • monotonic_buffer_resource 仅在资源被销毁时释放分配的内存(简单高效的内存资源管理器)

    附上原文地址原文
    整理不易,请随手点个赞,谢谢!
相关推荐
Fcy6486 分钟前
C++ vector容器的解析和使用
开发语言·c++·vector
lingggggaaaa8 分钟前
小迪安全v2023学习笔记(一百三十四讲)—— Windows权限提升篇&数据库篇&MySQL&MSSQL&Oracle&自动化项目
java·数据库·windows·笔记·学习·安全·网络安全
无限进步_16 分钟前
C语言文件操作全面解析:从基础概念到高级应用
c语言·开发语言·c++·后端·visual studio
_OP_CHEN19 分钟前
C++基础:(十五)queue的深度解析和模拟实现
开发语言·c++·stl·bfs·queue·容器适配器·queue模拟实现
起床气23332 分钟前
C++海战棋开发日记(序)
开发语言·c++
迦蓝叶38 分钟前
JAiRouter v1.0.0 正式发布:企业级 AI 服务网关的开源解决方案
java·运维·人工智能·网关·spring·ai·开源
安卓开发者43 分钟前
鸿蒙NEXT应用接入快捷栏:一键直达,提升用户体验
java·harmonyos·ux
APItesterCris1 小时前
TypeScript 与淘宝 API:构建类型安全的商品数据查询前端 / Node.js 服务
开发语言·php
ftpeak1 小时前
《Cargo 参考手册》第二十一章:Cargo 包命令
开发语言·rust