C++内存管理(候捷)第五讲 笔记

GNU C++对allocators的描述

在这里插入图片描述
在这里插入图片描述
new_allocator 和malloc_allocator,它们都没有特别的动作,无非底部调用operator new和malloc。它们没有用内存池
区别:::operator new是可重载的
在这里插入图片描述
智能型的allocator,使用内存池,分一大块然后切分成小块。
这类allocator有bitmap_allocator, pool_allocator, _mt_alloc(multithread多线程的分配器)
第三讲说明了实际malloc也是使用的内存池,因此速度提升不明显,很大的优势是减少了cookie
在这里插入图片描述
GNU C++ 提供三种测试,用于测速:插入数据测试,多线程状态下的插入和删除测试,多线程的生产者和消费者模型测试。测速分配器的效率
在这里插入图片描述
debug_allocator 不做分配的事情,只是在申请的内存外包一层

VS2013标准分配器&G4.9标准分配器与new_allocator以及G4.9malloc

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

G4.9array_allocator

在这里插入图片描述
指针_M_array指向一个C++数组,分配释放都是对数组的操作,静态数组不需要释放,归还。所以deallocate没做任何事
在这里插入图片描述
array_allocator使用例子
在这里插入图片描述

G4.9 debug_allocator

在这里插入图片描述
debug_allocator是一个包装器,把另一个分配器包装进来,这里是_Alloc分配器,定义为_M_allocator,实际分配的时候就是调用这个分配器的allocate,分配n + extra个大小的空间
在这里插入图片描述
第三讲介绍的分配器
在这里插入图片描述
在GNU C++4.9版本的__pool_alloc就是上面2.9版本的alloc。它的缺点是什么呢?只拿不还,不把分配的空间还给操作系统
在这里插入图片描述
__pool_alloc测试用例

bitmap_allocator

在这里插入图片描述
最重要的是_M_allocate_single_object和_M_deallocate_single_object
容器每次请求的都是一个元素的内存分配,所以这里就是单独处理一个object的请求。当不是一个object的时候,就会退化到operator new和operator delete
在这里插入图片描述
客户是容器的使用,容器要的一个元素的内存空间就是block,如果是std::list的时候,这个block还包括node里面的指针
上图中一次性挖64个blocks,挖取数量是两倍成长
加上前面的bitmap,还有前面的数值,一起称为super block。
需要64位的bimap,对应blocks数量,来表示每个block的状态。bitmap是unsigned int,一个bitmap是32位,只能记录32个blocks的情况。这里是64个blocks,需要2个bitmap来记录
前面还有一个unsigned int,use count,记录有几个block被分配
最前面还有一个unsigned int,记录super block的大小,记录的大小不包括这个unsigned int本身的大小,是其之后的大小
有一个mini vector(模拟标准库中的vector写出来的)来操纵super block,里面的start指针和finish指针分别指向super block的头和尾
在这里插入图片描述
分配内存:下面深灰色这个block被分配出去,use count = 1,然后bitmap[0]最后一位变成0,表示已经分配出去
在这里插入图片描述
分配第二个block,下面两个灰色的block表示被分配出去,use count = 2,bitmap[0]后两位变成0,表示这两个block被分配出去
在这里插入图片描述
一直分配block出去,已经分配出去63个block,对应的use count = 63,bitmap[1]和bitmap[0]变成80000000H和00000000H,只有最后一个block对应的bitmap中的bit才为1,表示未被分配出去
在这里插入图片描述
归还其中一个block,对应的bitmap要变成1,表示未分配(回收回来),然后use count由63变成62
在这里插入图片描述
当1个super block(有64个blocks)用完后,开始启用第二号super block,这时候super block中的block块数由64扩大两倍变成128个,由4个bitmap整数表示。
而且mini vector中由一个单元,变成两个单元,每个单元指向一个super block
在这里插入图片描述
第二个super block用完(前面已经用完第一个super block,其含有64个blocks,第二个super block包含128个blocks,也已经用完),启用第三个super bloc,其包含的blocks为128 x 2 = 256个。
mini vector中也有第三个单元来控制这个super block
在这里插入图片描述
第一个super block全回收,用另一个mini vector(称为free list)中的entry指针指向这个super block,表示已经回收

如果下次新分配一个super block,它其中blocks的数量要减半。前三个superblocks大小分别为64个,128个,256个,由于第一个superblock被回收,那么下次分配的superblock大小由已经分配的最大值256变成一半,为128个blocks

原来的mini vector里面的指向回收的这个superblock头和尾的entry被删除
在这里插入图片描述
第二个super block也全回收,则free list里的entry加一个,指向这个super block。
原来的mini vector里面指向这个superblock头尾的entry被删除
在这里插入图片描述
第三个super block被全回收,被free list的指针指向

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

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

相关文章

【PyTorch】基于YOLO的多目标检测项目(一)

【PyTorch】基于YOLO的多目标检测项目(一) 【PyTorch】基于YOLO的多目标检测项目(二) 目标检测是对图像中的现有目标进行定位和分类的过程。识别的对象在图像中显示有边界框。一般的目标检测方法有两种:基于区域提议的…

如何找到最快解析速度的DNS

如何找到最快解析速度的DNS DNS,即域名系统(Domain Name System),是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使用户更方便地访问互联网,而不用记住能够被机器直接读取的IP数…

6.乳腺癌良性恶性预测(二分类、逻辑回归、PCA降维、SVD奇异值分解)

乳腺癌良性恶性预测 1. 特征工程1.1 特征筛选1.2 特征降维 PCA1.3 SVD奇异值分解 2. 代码2.1 逻辑回归、二分类问题2.2 特征降维 PCA2.3 SVD奇异值分解 1. 特征工程 专业上:30个人特征来自于临床一线专家,每个特征和都有医学内涵;数据上&…

7月25日JavaSE学习笔记

线程的生命周期中,等待是主动的,阻塞是被动的 锁对象 创建锁对象,锁对象同一时间只允许一个线程进入 //创建锁对象Lock locknew ReentrantLock(true);//创建可重入锁 可重入锁:在嵌套代码块中,锁对象一样就可以直接…

进销存系统开发,进销存源码解析,添加商品选择商品

点击添加商品信息(可以) (关键字范围:商品名称,简拼,条形码,SKU,规格,参数,尺寸,接口,CPU,品牌) function cwpd_selSaleGoodsNewMore_Vtax2024(domid,width…

sed利用脚本处理文件

一、sed是什么 sed 命令是利用脚本来处理文本文件。它可以依照脚本的指令来处理、编辑文本文件。主要用来自动编 辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 二、sed的原理 读入新的一行内容到缓存空间; 从指定的操作指令中取出第一条指令&…

【时时三省】(C语言基础)分支语句2

山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 多分支语句 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3; 如果表达式1成立语句1会执行 如果不成立表达式2执行 如果表达式2成…

【运维笔记】数据库无法启动,数据库炸后备份恢复数据

事情起因 在做docker作业的时候,把卷映射到了宿主机原来的mysql数据库目录上,宿主机原来的mysql版本为8.0,docker容器版本为5.6,导致翻车。 具体操作 备份目录 将/var/lib/mysql备份到~/mysql_backup:cp /var/lib/…

Multiview LM-ICP 配准算法

Multiview LM-ICP 配准算法针对一些大型的物体(比如建筑物)或者需要精细化建模的物体(比如某个文物),仅仅进行成对的配准难以还原物体的全貌和细节。所以,多个视角的配准十分关键。 多视角的配准存在以下两…

[STM32]FlyMcu同时烧写BootLoader和APP文件-HEX文件组成

目录 一、前言 二、HEX文件的格式 三、组合HEX文件 四、使用FlyMcu烧录 一、前言 如题,BootLoader每次烧写都是全部擦除,当我们烧写APP程序的时候,BootLoader程序将不复存在,很多开发者或许只有USB转TTL模块,没有其…

grep命令搜索部分命令

首先 然后可以输入|以及grep命令 比如 bjobs| grep "3075*"bjobs| grep "3075"这个结果是这样的,

MYSQL 第四次作业

任务要求: 具体操作: 新建数据库: mysql> CREATE DATABASE mydb15_indexstu; Query OK, 1 row affected (0.01 sec) mysql> USE mydb15_indexstu; Database changed 新建表: mysql> CREATE TABLE student( ->…

遇到总条数count(*)返回不了数据

文章目录 前提1.准备数据1.1 建表语句1.2 插入数据 2.程序代码3.返回结果与分析4.验证 前提 获取h_user表中count(*)字段的值打印出来,打印出来是0,数据库中执行sql返回不是0。端点调试找到原因。下面先把数据库表数据及程序贴出来。 1.准备数据 1.1 …

CSS技巧专栏:一日一例 12 -纯CSS实现边框上下交错的按钮特效

CSS技巧专栏:一日一例 12 -纯CSS实现边框上下交错的按钮特效 大家好,今天我们来做一个上下边框交错闪动的按钮特效。 本例图片 案例分析 虽说这按钮给人的感觉就是上下两个边框交错变换了位置,但我们都知道border是没法移动的。那么这个按…

【无标KaiwuDB CTO 魏可伟:差异化创新,面向行业的多模架构题】

2024年7月16日,KaiwuDB CTO 魏可伟受邀于 2024 可信数据库发展大会主论坛发表演讲《多模一库 —— KaiwuDB 的现代数据库架构探索》,以下是演讲精华实录。 多模数据库 是顺应时代发展与融合趋势的产物 数据模型最早始于网状模型和层次模型,…

Spark实时(五):InputSource数据源案例演示

文章目录 InputSource数据源案例演示 一、​​​​​​​File Source 1、读取text文件 2、读取csv文件 3、读取json文件 二、Socket Source 三、Rate Source InputSource数据源案例演示 在Spark2.0版本之后,DataFrame和Dataset可以表示静态有边界的数据&am…

移动式气象站:便携科技的天气守望者

在科技日新月异的今天,我们身边的许多设备都在向着更加智能化、便携化的方向发展。而在气象观测领域,移动式气象站的出现,不仅改变了传统气象观测的固有模式,更以其灵活性和实时性,在气象监测、灾害预警等领域发挥着越…

MySQL练习05

题目 步骤 触发器 use mydb16_trigger; #使用数据库create table goods( gid char(8) primary key, name varchar(10), price decimal(8,2), num int);create table orders( oid int primary key auto_increment, gid char(10) not null, name varchar(10), price decima…

基于python的BP神经网络红酒品质分类预测模型

1 导入必要的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder from tensorflow.keras.models import Sequential from tenso…

NET8部署Kestrel服务HTTPS深入解读TLS协议之Certificate证书

Certificate证书 Certificate称为数字证书。数字证书是一种证明身份的电子凭证,它包含一个公钥和一些身份信息,用于验证数字签名和加密通信。数字证书在网络通信、电子签名、认证授权等场景中都有广泛应用。其特征如下: 由权威机构颁发&…