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

2024-06-09 1573阅读

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

Allocators

内存分配器

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

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

    为什么用分配器?

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

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

      接口

      自定义内存分配器

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

      内存分配委托给new/delete

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

      简单块内存池分配器

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

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

      可以自定义分配器

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

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

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

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

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

        使用内存分配器的方法

        推荐:通过 std::allocator_traits

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

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

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

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

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

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

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

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

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

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

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

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

        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 仅在资源被销毁时释放分配的内存(简单高效的内存资源管理器)

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

          附上原文地址原文

          整理不易,请随手点个赞,谢谢!

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]