用幻灯片讲解内存分配器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 仅在资源被销毁时释放分配的内存(简单高效的内存资源管理器)
    在这里插入图片描述

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 22:40:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 22:40:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 22:40:02       87 阅读
  4. Python语言-面向对象

    2024-06-08 22:40:02       96 阅读

热门阅读

  1. C语言从头学15——数据类型(一)

    2024-06-08 22:40:02       29 阅读
  2. Linux搭建和共享第三方软件仓库

    2024-06-08 22:40:02       25 阅读
  3. 关于global和nonlocal那点事!!!

    2024-06-08 22:40:02       29 阅读
  4. 设计模式之迭代器模式

    2024-06-08 22:40:02       30 阅读
  5. 简单使用phpqrcode 生成二维码图片

    2024-06-08 22:40:02       25 阅读
  6. 自然资源-国土空间规划中的各类边界

    2024-06-08 22:40:02       32 阅读
  7. RK3588 Android13自定义一个按键实现长按短按

    2024-06-08 22:40:02       26 阅读
  8. Elasticsearch reindex用管道转换类型

    2024-06-08 22:40:02       31 阅读