盛世宏图 发表于 2024-6-11 19:24:46

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

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

Allocators

内存分配器


[*]提供内存分配策略的通用接口
[*]委托给 C++ 运行时:new / delete
[*]使用块内存池管理内存
[*]使用差别大小的块内存池管理内存
https://img-blog.csdnimg.cn/direct/0ba320f83075405fad58072e128f7a33.png#pic_center
为什么用分配器?



[*]将容器逻辑与内存分配策略解耦
[*]速率:内存分配速率慢
[*]确保有足够的内存可用
[*]确保所需的内存布局/更好的局部性等
https://img-blog.csdnimg.cn/direct/b7247cf60743405fa5ad7c68e4503260.png#pic_center
接口

自定义内存分配器
https://img-blog.csdnimg.cn/direct/48f2055c43574c90ab75edb2dcd55bbf.png#pic_center
内存分配委托给new/delete

https://img-blog.csdnimg.cn/direct/dfbb2a656ddd48718b3bd6a38fa5d34c.png#pic_center
简单块内存池分配器

块内存池分配器的意思是预先在内存中分配一块或多块内存,在真正需要内存分配时从预留内存块池中再取出可用的块内存。进步动态分配内存的效率,节流分配内存的时间。
https://img-blog.csdnimg.cn/direct/a52bdda83ef643758a1c3e0c4f567828.png#pic_center
可以自定义分配器

std:: 下令空间下的大部分容器都可以自定义内存分配器,除了std::array。
https://img-blog.csdnimg.cn/direct/da3003c7a4ba40c386f863078fff8665.png#pic_center
分配器是容器类型的一部分



[*]分配器在运行时无法交换
[*]差别的函数参数
https://img-blog.csdnimg.cn/direct/abddc10fecd94407bbcd3598f0c217ee.png#pic_center
使用内存分配器的方法

保举:通过 std::allocator_traits
allocator_traits定义了统一访问分配器属性和函数的接口。
https://img-blog.csdnimg.cn/direct/09625873d67c4e179a660709f28a56eb.png#pic_center
多态内存资源分配器(C++17)

C++17 中的多态分配器概念是对尺度库中的尺度分配器的增强。
它比普通分配器更易于使用,答应容器拥有相同的类型但具有差别的分配器,乃至可以在运行时更改分配器。
std::pmr就是C++17专门为多态内存分配增长的命名空间。
https://img-blog.csdnimg.cn/direct/734cbdf2f3ae4deea08cec52c240c8a3.png#pic_center
可以在运行时改变的内存资源(std::pmr::monotonic_buffer_resource)(C++17)
pmr::monotonic_buffer_resource 是 C++17 中引入的一种内存资源(memory resource),它是一个单向链表,用于追踪动态分配的内存。
https://img-blog.csdnimg.cn/direct/3f0e584224974b40be2159dd4242d7da.png#pic_center
pmr::memory_resource 是pmr::monotonic_buffer_resource以及其他实现的抽象基类。
https://img-blog.csdnimg.cn/direct/0cf1b5e484394ac09f6d6323184061c3.png#pic_center
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 仅在资源被销毁时释放分配的内存(简单高效的内存资源管理器)
https://img-blog.csdnimg.cn/direct/416ccc7d97c140e3ae5807b6ad3e9b38.png#pic_center
附上原文地址原文
整理不易,请随手点个赞,谢谢!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 内存管理--4.用幻灯片讲解内存分配器Allocator