首页 > 系统相关 >8/28 深入理解计算机系统笔记 动态内存分配

8/28 深入理解计算机系统笔记 动态内存分配

时间:2022-08-28 20:25:29浏览次数:57  
标签:计算机系统 动态内存 合并 28 链表 内存 分配器 分配 空闲

9.9 动态内存分配

动态内存分配器维护一个进程的虚拟内存区域,称为堆。
对于每个进程,内核维护一个变量brk,它指向堆的顶部。
分配器将堆视做一组不同大小的块的集合来维护。每个块就是一个连续的虚拟内存片,要么是已分配的,要么是空闲的。块被释放要么是应用程序显式的执行的,要么是内存分配器隐式的执行的。

显式分配器
隐式分配器:分配器检查一个以分配块何时不在被程序所使用,那么就释放这个块,隐式分配器也叫垃圾收集器。

malloc函数和free函数
在32位模式中,malloc返回的块的地址总是8的倍数,在64位模式中,该地址总是16的倍数。
calloc 初始化为0的分配
recalloc 改变分配大小

动态内存分配器可以使用mmap和munmap函数,显示的分配和释放堆内存,也可以使用sbrk函数。
void *sbrk(intptr_t incr)
sbrk通过内核的brk指针来增加incr来扩展或者收缩堆,incr可以是负数。

free()函数没有返回值,不会报错。

分配器的要求和目标:
要求:见书P590
目标:
最大化吞吐率
最大化内存利用率(参考峰值利用率)

碎片
内部碎片:已分配块比有效载荷大的时候发生,是已分配的块大小和它们的有效载荷大小之差。
发生的情形大都是分配器为了满足当前请求模式的约束条件。

外部碎片:是空间空闲内存合起来可以满足一个分配需求但是没有一个单独的空闲块可以处理这个请求。
外部碎片难以量化,且不可预测,所以分配器通常采用启发式策略来试图维持少量大空闲块,而不是大量小空闲块。

分配器要把握好空闲块组织,放置新分配的块,分割空闲块的剩余部分,空闲块合并

隐式空闲链表
块需要数据结构区分 块边界,区分分配块和空闲块,包括满足对齐条件的填充区域。

头部
有效载荷
填充
隐式空闲链表:将堆组织为一个连续的已分配块和空闲块的序列,空闲块通过头部的大小字段隐含着链接起来。 优点是简单,缺点是操作开销大(要对空闲链表进行搜索)

放置以分配的块:
按照放置策略确定(首次适配,下一次适配,最佳适配等)详见书P594

获得额外的堆内存,调用sbrk函数,分配器会将额外的内存转化为一个大的空闲块,并插入空闲链表。

合并空闲块:

  1. 立即合并(可能会抖动)
  2. 推迟合并,直到某个请求分配失败,然后扫描整个堆,合并所有的块。

带边际标记的合并:
合并前面的块需要搜索整个链表,所以使用了边界标记:在块结尾处增加一个脚部,是头部的副本。
合并的时候要更新头部和脚部。
可以把以分配/空闲位的判断位放在多出来的位中,这样已分配的位就不需要脚部了,空闲位需要脚部。

9.9.12 实现一个简单的分配器见书P597-602

显式空闲链表
使用双向链表,使首次适配的分配算法的分配时间由块总数的线性时间变为了空闲块数量的线性时间。
按先进先出的顺序维护列表。
按地址的顺序维护列表。(内存利用率更高)
显式链表的空闲块要足够大来包含指针,提高了内部碎片的程度。

分离的空闲链表:

  1. 简单分离存储:把空闲块分割成大小相等的块,按需分配块的个数,不合并,不分割。
  2. 分离适配:分配器维护一个空闲链表数组,每个空闲链表和一个大小相关。每次去特定的链表查找,如果没有合适的就申请堆空间,分配后分割放置在链表里。
  3. 伙伴系统:把块按2的幂来分割,请求到向上舍入的最近的2的幂的块。搜索快,合并快,内部碎片大。

标签:计算机系统,动态内存,合并,28,链表,内存,分配器,分配,空闲
From: https://www.cnblogs.com/hy227/p/16633531.html

相关文章

  • 2022.8.28
    看了下斯特林数和多项式,在旁边听hyy和lzx讲课,顺便捉了几个Bug,算是复习了一下计数。写了些多项式。之后打洛谷上的比赛,第二题不会,感觉很神奇。Todo:讲dp。改洛谷比赛题......
  • 8 月 28 日记录
    NOI2022asdfz好像又没打好。8个省队就进了2个国集,甚至有俩Cu和一个Fe,好像又是百万deque的坑。没心思看题,只听学弟描述,说大多数都是observation,而普通的算法和数......
  • 【动植物研究动态】20220828文献解读
    目录ScienceBulletin|中国农科院作科所徐建龙&邱丽娟:大豆种质资源组学数据库SoyFGBv2.0搭建SCLS|种康、贾继增等:中国小麦基因组学和性状改良研究综述TheCropJourna......
  • 2022-8-28 每日一题-二分查找-剑指offer-字典树
    793.阶乘函数后K个零难度困难122收藏分享切换为英文接收动态反馈 f(x) 是 x! 末尾是0的数量。回想一下 x!=1*2*3*...*x,且 0!=1 。例如, ......
  • 2022年8月28日
    经历了人生的大起大落,身边的人态度180度大转变,面目可憎!看清了人情冷暖,世态炎凉,虚情假意的同学,不再真诚的朋友,不再想见任何人了,虚情假意的亲戚,我不再假装有很多朋友,而是回到......
  • (0828)【vivado版本-对仿真工具版本要求】
    (1)https://blog.csdn.net/Alonger1988/article/details/120506385vivado,vsim版本兼容问题 (2)版本匹配:http://dengkanwen.com/567.html ......
  • 《GB28007-2011》PDF下载
    《GB28007-2011儿童家具通用技术条件》PDF下载《GB28007-2011》简介本标准规定了儿童家具的术语和定义、一般要求、安全要求、警示标识、试验方法、检验规则及标志、使......
  • 《GB28008-2011》PDF下载
    《GB28008-2011玻璃家具安全技术要求》PDF下载《GB28008-2011》简介本标准规定了玻璃家具的术语和定义、分类、要求、试验方法、检验规则、标志、使用说明、包装、运输......
  • P2894 [USACO08FEB]Hotel G
    P2894[USACO08FEB]HotelG分析题目很简单,给自己复建用的,好久没打代码了,摸鱼必死qwq。我们读完题目,可以很容易发现,这题就是要维护最长连续区间,区间内全为0。维护最长连......
  • 第一章计算机系统概述
    1.1操作系统的概念(定义)功能和目标1.1.1操作系统的概念操作系统(OperatingSystem,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源......