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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学习——Linux高级编程复习(文件IO)——day37

1. 文件IO——(无缓存、文件描述符) 1.1 定义 文件IO是指文件输入/输出,是计算机程序中用于读取和写入文件的操作。通过文件IO,程序可以从文件中读取数据到内存中,或者将内存中的数据写入文件中,文件可以是…

Python3 笔记:字符串的 startswith() 和 endswith()

1、startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定了值,则在指定范围内检查。 语法:str.startswith(substr, beg0,endlen(string)) 参数: s…

华为OD技术面试-最长回文串-2024手撕代码真题

题目:最长回文串 给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的 回文串 的长度。 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。 示例 1: 输入:s = "abccccdd" 输出:7 解释: 我们可以构造的最…

基于51单片机水塔水位控制系统

基于51单片机水塔水位控制 (仿真+程序) 功能介绍 具体功能: 1.用滑动变阻器模拟水位,ADC0809将模拟信号转换为数字信号; 2.LCD1602显示当前水位和水位阈值; 3.当水位超过设定阈值&#xff…

MySQL基础_10.约束

文章目录 第一章、约束1.1 约束的定义1.2 非空约束1.3 唯一性约束1.4 主键约束1.5 自增列1.6 外键约束1.7 CHECK约束1.8 DEFAULT约束 第一章、约束 1.1 约束的定义 约束是对表中字段的限制。 约束按照作用范围可以分为:列级约束和表级约束 列级约束:声…

【二进制部署k8s-1.29.4】十二、ingress-nginx的安装部署

文章目录 简介 一.ingress的安装一.验证安装 简介 本章节主要讲解安装ingress-nginx-v1.10.1的安装,ingress的安装比较简单,只需要下载yaml文件,修改一下镜像地址,原本的镜像地址由于墙的原因,没法直接下载&#xff0c…

C++网络编程——多路IO复用 重点epoll

前言补充 阻塞与非阻塞 同步阻塞IO (Blocking IO) : 传统IO模型 同步非阻塞IO (Non-blocking IO): 默认创建的socket都是阻塞的,若是要设置成非阻塞IO需要socket被设置成NONBLOCK。 IO多路复用(IO Multiplexing&…

微软 Windows 10 22H2 发布可选更新 19045.4474,修复窗口显示问题等

微软今天面向 Windows 10 22H2 版本,发布了 KB5037849 非安全可选更新,用户安装后版本号升至 Build 19045.4474。 IT之家 5 月 30 日消息,微软今天面向 Windows 10 22H2 版本,发布了 KB5037849 非安全可选更新,用户安…

内部资料13000+变现资源,写作副业项目,找灵感就用它!

很多刚学在公众号,或是在其他自媒体平台写副业项目的朋友,写一段时间后会发现找不到写的内容。于是,每天都会为写什么而苦恼,找不到素材,没有灵感。 关注富哥资源站的朋友都知道,咱们的资源站已经更新了内…

2024 Jiangsu Collegiate Programming Contest E. Divide 题解 主席树

Divide 题目描述 Given an integer sequence a 1 , a 2 , … , a n a_1,a_2,\ldots,a_n a1​,a2​,…,an​ of length n n n. For an interval a l , … , a r a_l,\ldots,a_r al​,…,ar​ in this sequence, a Reduce operation divides the maximum value of the inter…

【NI国产替代】产线测试:数字万用表(DMM),功率分析仪,支持定制

数字万用表(DMM) • 6 位数字表显示 • 24 位分辨率 • 5S/s-250KS/s 采样率 • 电源和数字 I/O 均采用隔离抗噪技术 • 电压、电流、电阻、电感、电容的高精度测量 • 二极管/三极管测试 功率分析仪 0.8V-14V 的可调输出电压,最大连…

[Cloud Networking] Layer Protocol (continue)

文章目录 1. STP / RSTP / MSTP Protocol1.1 STP的作用1.2 STP 生成树算法的三个步骤1.3 STP缺点 2. ARP Protocol3. DHCP Protocol3.1 DHCP 三种分配方式3.2 DHCP 攻击 4. IPSEC / MACSEC 1. STP / RSTP / MSTP Protocol 1.1 STP的作用 消除二层环路:通过阻断冗余…

shell脚本基础教程

快捷目录 1、解释器2、shell脚本调用方式3、变量自定义变量环境变量特殊变量变量的默认值declare 命令readonly命令let命令 4、数据类型字符串 5、字符串操作6、数组定义数组读取数组修改数组删除数组获取数组长度 7、运算符算术运算符关系运算符布尔运算符逻辑运算符 要在[[ ]…

求极差(range)

题目描述 小红拿到了一个数组,其中每个元素都是素数。小红准备进行若干次以下操作: 选择两个素数元素,将他们合并,生成的新元素为原来两个素数的乘积。 现在小红希望操作到不能再操作为止,然后使得最终的极差&#…

王道408数据结构CH4_串

概述 4 串 4.1 串的实现 4.1.1 存储结构 定长顺序存储 #define Maxsize 255typedef struct{char *ch[Maxsize];int length; }SString;堆分配存储 typedef struct{char *ch;int length; }HString;块链存储 4.1.2 基本操作 4.2 模式匹配(子串定位) 4.2.…

Docker面试整理-Docker Swarm是什么?

Docker Swarm 是 Docker 的原生集群管理和编排工具,用于将多个 Docker 主机集合成一个虚拟的 Docker 主机。它允许你在多台机器上部署、管理和扩展容器化应用,是构建和管理容器化应用的高可用集群的一种方式。 Docker Swarm 的核心特性包括: 1. 集群管理: ● Docker Swarm…

RaspAP:轻松实现树莓派无线 AP

RaspAP 是一个可以将树莓派轻松部署成无线 AP(Access Point)的软件方案,具有一套响应式的 WebUI 来控制 WiFi,用起来和家用路由器一样方便。RaspAP 可以运行在 Raspbian 上,只需要先给树莓派安装好 Raspbian 系统&…

12寸晶圆厂建设概述

1、关键步骤 半导体12英寸(12吋)晶圆厂的建厂过程是一个复杂且耗时的工程,涉及到多个阶段,包括但不限于以下几个关键步骤: 1. **项目规划与设计**:首先需要进行项目的可行性研究,确定产品定位…

docker和docker-compose的安装

docker的安装 1.安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.设置开机自启动 systemctl start docker #启动docker systemctl enable docker3.配置阿里云镜像 不配置镜像的话,进行 docker pull 等操作会比较慢。进入阿里云&…

Hudi Spark Sql Procedures 回滚 Hudi 表数据

前言 因为有 Hudi Rollback 的需求,所以单独总结 Hudi Spark Sql Procedures Rollback。 版本 Hudi 0.13.0(发现有bug)、(然后升级)0.14.1Spark 3.2.3Procedures 官方文档:https://hudi.apache.org/docs/procedures 相关阅读:Hudi Spark SQL Call Procedures学习总结…