5.C++内存池、内存分配_c++ 申请内存池用于接管内存分配-程序员宅基地

技术标签: C++  

1. 空间的配置与释放–std:alloc(SGI实现)

  • SGI标准模版库:
  • 设计时需要考虑的问题:
  1. 从堆区申请内存空间;
  2. 考虑多线程;
  3. 考虑内存不足时的应对措施;
  4. 考虑大量小区块可能造成的内存碎片问题;
  • SGI的alloc类是使用了双层配置器:分别处理大内存请求和小内存请求,以避免内存碎片问题;
  • 代码通过检测是否定了__USE_MALLOC来决定是否使用了二级配置器
  1. 当没有定义__USE_MALLOC时,使用一级配置器。一级配置器使用malloc、realloc、free函数执行内存申请和释放;并且实现了**new-handler用于允许用户设置内存不足时的处理函数;
  2. 否则使用二级配置器处理用户请求。二级配置器主要用于处理对小内存块的请求;如果发现 用户请求的内存快大于128bytes,就会将工作交到一级配置器 ;
  • 下面主要介绍二级配置器如何处理小内存块(<=128bytes)的请求。这设计两个部分:free_list和内存池。 free_list保存了不同的固定大小的内存块,内存大小分别时8bytes、16bytes、…、128bytea,总共16种,即16个自由链表,每个自由链表分配20个块;

自由链表数据结构如下所示:

free_list相关知识:

  • 一个自由链表(free_list)在同一时刻,具备且仅具备如下功能之一:
  1. 作为一个自由链表指针,指向下一个自由链表
  2. 自身作为一块可用内存,供用户使用;
    由于上述两点用途不可能同时出现,故将obj定义为union,将free_list_link和client_data共享同一块内存来节省内存;

注意:这是链表,链表在内存中的分布时杂乱而不连续的,并非你所示的连续一段区域。上面说的,一个obj结构,要不作为一块已被分配内存供用户使用,要不作为待分配区域存在于自由链表中。所以自由链表中的每个块,都是指向下一个自由链表块,即理解为;

struct node{
    
     
node *next;
};
  • 一旦这个自由链表块被分配给用户了,那么它就从自由链表中被移除了,不再被认为一个自由链表块(由union的语义,从此它就是一块普通的、分配给用户的内存,直到被用户释放,它才被再次加入到自由链表中);----->结构体也可以实现;
    一旦内存分配完成,这块内存(即自由链表块)的指针就会被malloc()/new函数返回给用户,接下来保持指针的任务就交给用户了,只有未分配的内存才能存在于自由链表中!
int Align=8;
int MaxBytes
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42698422/article/details/104888591

智能推荐

ESP32 LVGL8.1 实现太空人显示(29)_lv_img_declare-程序员宅基地

文章浏览阅读8.7k次,点赞11次,收藏90次。文章目录一、ESP32 LVGL工程配置1.1从库中下载LVGL代码1.2配置适合ESP32 液晶屏1.3编译下载测试二、GIF图片处理2.1下载gif图片2.2将gif图片按照帧率导出成图片2.lvgl animimg对象实现图片的播放1.3下载测试 注:本博客作为学习笔记,有错误的地方希望指正一、ESP32 LVGL工程配置首先要通过液晶屏显示太空人,我们这里主要有两种方式可以实现,第一种直接使用厂家只带的液晶屏幕驱动去实现图片的显示,另外使用其他的GUI提供的控件去实现,嵌入式常见的GUI挺多_lv_img_declare

最小权顶点覆盖问题-程序员宅基地

文章浏览阅读1.5w次,点赞7次,收藏30次。问题描述:给定一个赋权无向图G=(V,E),每个顶点v∈V都有一个权值w(v)。如果UV,且对任意(u,v)∈E有u∈U或v∈U,就称U为图G的一个顶点覆盖。G的最小权顶点覆盖是指G中所含顶点权之和最小的顶点覆盖。问题解决:用优先队列分支限界方法解最小权顶点覆盖,在算法的搜索的进程中保存当前已构造出的部分解空间树,在算法搜索达到叶节点时,其最优值对应的最优解同时保存下来。优先队列的优先_最小权顶点覆盖

matlab如何导入map,matlab添加M_map工具箱-程序员宅基地

文章浏览阅读517次。首先试了matlab自带的worldmap,感觉画出来的图形不尽如人意,比较杂乱。如下图。查阅了些资料,请教了Liangjing,一致推荐m_map。为了达到想要的效果,这次只要不再偷懒,下载M-Map工具箱(http://www.eos.ubc.ca/~rich/map.html)并进行安装。所幸过程比较顺利,现记录如下,回头把画出的效果图再添上。其他matlab的toolbox安装,也可参考进..._mmap工具包如何安装

iOS学习:iOS代码规范_ios replaceobjectsinrange-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏5次。作者感言阅读前言iOS代码规范Import规范Define规范Paragma Mark 规范Interface规范implementation规范实例规范NSDictionary规范NSArray规范函数规范If-Else规范For-In For 规范Block规范运算符规范命名规范实例命名规范Property命名规范Interface-class命名规范B_ios replaceobjectsinrange

python 将列表中的字符串转为数字格式,以及pandas Series或index转换为Numpy数组_pandas index存入数组-程序员宅基地

文章浏览阅读1.7w次,点赞7次,收藏39次。本文实例讲述了Python中列表元素转为数字的方法分享给大家供大家参考,具体如下:1.首先可以用循环来解决(直接粗暴)举个栗子:<1>有一个数字字符的列表:numbers = ['2', '5', '130', '8']`<2>想要把每个元素转换为数字:numbers = [2, 5, 130, 8]用一个循环来解决:new_numbers = [];..._pandas index存入数组

PHP 从数据库Mysql中读取数据生成excel(解决乱码问题,解决中文变问号问题)_mysql 数据库查出的字符串导出excel转码-程序员宅基地

文章浏览阅读7.5k次。有时候直接用php导出excel会有乱码或者中文变成问号出现,这时候肯定就是编码的问题了。 前 后 前 后 环境MySQL 5.0 数据库 utf8_general_ci 编码PHP UTF8 编码需要注意的问题1. 从数据库读取出来的数据是否乱码? mysql_query( "SET NAMES 'u_mysql 数据库查出的字符串导出excel转码

随便推点

巧用ChatGPT快速提高职场晋升力、搞定数据分析玩、转新媒体运营-程序员宅基地

文章浏览阅读7.6k次,点赞147次,收藏134次。在日常工作中巧用ChatGPT可以帮助我们提高工作效率、创造价值并降低成本。通过合理地利用ChatGPT的功能和应用场景,企业和个人可以更好地实现工作目标、提升竞争力并取得更大的成功。随着人工智能技术的不断进步和发展我们相信巧用ChatGPT将成为未来工作中的一种常态化工具为我们的职业生涯和生活带来更多便利和价值。本书是一本关于数据分析与ChatGPT应用的实用指南,旨在帮助读者了解数据分析的基础知识及利用ChatGPT进行高效的数据处理和分析。_巧用chatgpt快速提高职场晋升力

vscode同步git代码时源代码管理出现10k+更改如何处理?_git init 代码有 10k+ 更新-程序员宅基地

文章浏览阅读2.7k次。vscode出现10k+更改需要处理_git init 代码有 10k+ 更新

机器学习算法之K-means(K均值聚类)算法_k-means聚类算法的anchors_num的最大值-程序员宅基地

文章浏览阅读6.1k次,点赞5次,收藏124次。聚类聚类,简单来说,就是将一个庞杂数据集中具有相似特征的数据自动归类到一起,称为一个簇,簇内的对象越相似,聚类的效果越好。它是一种无监督的学习(Unsupervised Learning)方法,不需要预先标注好的训练集。聚类与分类最大的区别就是分类的目标事先已知,例如猫狗识别,你在分类之前已经预先知道要将它分为猫、狗两个种类;而在你聚类之前,你对你的目标是未知的,同样以动物为例,对于一个动物集来..._k-means聚类算法的anchors_num的最大值

edu教育邮箱免费申请注册Google drive无限网盘和微软OneDrive经验分享_onedrive a5-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏15次。前言介绍很多萌新小白初涉国外云盘对Google云盘和微软OneDrive云盘到底容量有多大、数据隐私是否安全、自己免费申请白嫖的账户可用多久都没有清晰准确的认识和了解,又加上网上博客文章大多都是很多年前的方法和政策,完全给不了网友实质上的建议,本文来帮大家屡屡头绪。产品认识Google DriveGoogle Drive云端硬盘提供了15G 的免费容量,对于一般文档是够用了。Google drive唯一的好处就说分享资源超级方便,共享也很容易。Google 照片提供不限容量的照片存储_onedrive a5

把平板、手机作为电脑第二屏幕(Linux系统下)_平板副屏linux-程序员宅基地

文章浏览阅读1.5w次,点赞18次,收藏69次。将平板、手机作为电脑第二屏幕(Linux系统下)背景把手机、平板作为电脑第二屏幕是上个学期偶然想到的,那时我一边看网上的教程一边码代码。由于看的是视频教程,缩小了就看不清上面的字,放大了又会挡住打字区域。这时就想如果有个第二屏幕就很方便了,买个屏幕又不太方便,想到自己还有个平板天天吃灰,这不是就是现成的屏幕嘛。在网上搜了搜发现真的有解决方案,windows和mac上有很多软件可以用,但我平时..._平板副屏linux

JPA 批注参考(3)-程序员宅基地

文章浏览阅读109次。来源:www.oracle.com■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■本文的主要内容如下:详细解释了下面10个批注的含义及其批注所包含的属性: @Entity@EntityListeners@EntityResult@Enumerated@ExcludeDefaultListeners@ExcludeSuperclassListeners@FieldRe..._entityresult

推荐文章

热门文章

相关标签