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

news2024/11/26 4:49:26

用幻灯片讲解内存分配器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.coloradmin.cn/o/1803414.html

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

相关文章

【玩转C语言】第三讲---> scanf 和 printf 函数详解(非常重要)!

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 引言: 大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识…

【AI】你要的U-KAN来了

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 U-KAN来了,快是真的快的,上个月才出的KAN,不得不说快。 先占个坑,有时间细看。 下面放上摘要 1. 正文 …

Bio-Info 每日一题:Rosalind-04-Rabbits and Recurrence Relations

🎉 进入生物信息学的世界,与Rosalind一起探索吧!🧬 Rosalind是一个在线平台,专为学习和实践生物信息学而设计。该平台提供了一系列循序渐进的编程挑战,帮助用户从基础到高级掌握生物信息学知识。无论你是初…

八、C语言:操作符详解

一、移位操作符 1.1左移操作 左边丢弃,右边补0 1.2右移操作 算数右移:右边丢弃,左边补原符号位 逻辑右移:右边丢弃,左边补0 int main() {int a -1;int b a >> 1;printf("b%d\n",b);return 0; } 原码…

Science刊发!乌普萨拉大学最新神经形态触觉人造皮肤可快速精准识别物体

当前,人形机器人使用的传统电子皮肤在处理触觉感知信息方面的能力并不强,尤其是在时间信息编码和快速特征提取方面存在一定的局限性。简单来说就是机器人无法完成在接触到物品的瞬间,判断用怎样的力度去对该物品做出反应。尽管多模态大模型和…

解决Android Studio Iguana版本不显示原创的GradleTask问题

问题描述: 下面是我的AndroidStudio版本号,升级后我发现项目里面自定义的gradletask找不到了??? 解决方案: 1、去setting里面把下面红框里面的选项勾选一下,缺点就是sync的时候会慢一些。 2、…

电子电气架构——车载诊断DTC一文通

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标…

【python】OpenCV GUI——Mouse(14.1)

参考学习来自 文章目录 背景知识cv2.setMouseCallback 介绍小试牛刀 背景知识 GUI(Graphical User Interface,图形用户界面) 是一种允许用户通过图形元素(如窗口、图标、菜单和按钮)与电子设备进行交互的界面。与传统…

算法—字符串操作

394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:string longestCommonPrefix(vector<string>& strs) { string retstrs[0];//***1***记得先要初始化ret&#xff0c;作为第一个比较值for(int i0;i<strs.size();i){retfoundcom…

03-07Java自动化之JAVA基础之循环

JAVA基础之循环 一、for循环 1.1for循环的含义 for&#xff08;初始化语句;条件判断;条件控制或–&#xff09;{ ​ //代码语句 } 1、首先执行初始话语句&#xff0c;给变量一个起始的值 2、条件判断进行判断&#xff0c;为true&#xff0c;执行循环体中的代码语句 ​ …

人体感应提醒 大声公+微波模块

文章目录 模块简介接线程序示例 模块简介 微波感应开关模块 RCWL-0516是一款采用多普勒雷达技术&#xff0c;专门检测物体移动的微波感应模块。采用 2.7G 微波信号检测&#xff0c;该模块具有灵敏度高&#xff0c;感应距离远&#xff0c;可靠性强&#xff0c;感应角度大&#…

DOM型xss靶场实验

DOM型xss可以使用js去控制标签中的内容。 我使用的是一个在线的dom型xss平台&#xff0c;靶场链接&#xff1a;Challenges 第一关Ma Spaghet!&#xff1a; Ma Spaghet! 关卡 <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(locatio…

【QT5】<应用> 小游戏:贪吃蛇

文章目录 一、项目要求 二、需求分析 三、实现效果 四、代码 一、项目要求 【1】主要实现&#xff1a;游戏界面存在一条蛇&#x1f40d;&#xff0c;使用键盘wsad或者↑↓←→键盘可以控制蛇的行走方向。同时界面中会随机出现食物&#xff0c;蛇可以吃食物&#xff0c;然后…

结构体(1)<C语言>

导言 结构体是C语言中的一种自定义类型&#xff0c;它的值&#xff08;成员变量&#xff09;可以是多个&#xff0c;且这些值可以为不同类型&#xff0c;这也是和数组的主要区别&#xff0c;下面将介绍它的一些基本用法&#xff0c;包括&#xff1a;结构体的创建、结构体变量的…

LeetCode714买卖股票的最佳时机含手续费

题目描述 给定一个整数数组 prices&#xff0c;其中 prices[i]表示第 i 天的股票价格 &#xff1b;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易&#xff0c;但是你每笔交易都需要付手续费。如果你已经购买了一个股票&#xff0c;在卖出它之前你就不能再继续购买…

鸿蒙北向开发 IDE DevEco Studio 3.1 傻瓜式安装闭坑指南

首先下载 安装IDE 本体程序 DevEco Studio 下载链接 当前最新版本是3.1.1,下载windows版本的 下载下来后是一个压缩包, 解压解锁包后会出现一个exe安装程序 双击运行安装程序 一路 next ( 这里涉及安装文件目录,我因为C盘够大所以全部默认了,各位根据自己情况选择自己的文件…

物证管理系统|DW-S404实现物证科学化管理

随着社会的进步和科技的发展&#xff0c;信息化和数字化已经成为各个行业的必然趋势。在众多领域中&#xff0c;物证管理系统逐渐受到广泛的关注和应用。 物证是公安机关处理案件的关键凭证&#xff0c;针对过去物证管理分散、损毁遗失等严重问题&#xff0c;集驰电子JIONCH推…

使用OpenCV dnn c++加载YOLOv8生成的onnx文件进行实例分割

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 EISeg 工具进行标注&#xff0c;然后使用 eiseg2yolov8 脚本将.json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容如下…

数字校园的优势有哪些

数字化时代下&#xff0c;数字校园已成为教育领域一股显著趋势。数字校园旨在借助信息技术工具对传统校园进行改造&#xff0c;提供全新的教学、管理和服务方式。那么&#xff0c;数字校园究竟具备何种优势&#xff1f;现从三个方面为您详细介绍。 首先&#xff0c;数字校园为教…

平衡二叉树详解

目录 平衡二叉树的定义 平衡二叉树的基本操作 查找 插入 AVL树的建立 平衡二叉树的定义 平衡二叉树仍然是一棵二叉查找树&#xff0c;只是在其基础上增加了平衡的要求&#xff0c;也就是其左右子树的高度之差的绝对值不超过1。 在定义树的结构时需要加入一个变量height&…