CSAPP malloc

整体介绍

malloc目的就是在堆中申请一片大小为size的空间,下面会描述CASPP中介绍的几种方法以及一些其他方式,首先我们可以看一下一个进程虚拟内存的结构。

use stack
Free area
memory-mapped region for shared libraries
Free area
heap
.bss
.data
.text
Free area

1.Implicit Free List

首先看一下每块的结构

SizeAllocate/Free
payload and padding
SizeAllocate/Free
该结构第一行为header,最后一行为footer,都记录着块大小和是否被使用的标记,这样就能做到双向查找,其结构一致,因为八字节对齐所以最后三位一定是0,可以用最后三位来记录是否分配或者如果是红黑树可以记录颜色。中间部分即为数据。占用空间最小应为8。优点的话就是简单,缺点分配和未分配都在一起每次查找都是O(n)。

2.Explicit Free Lists

还是先看每块结构

SizeAllocate/Free
payload and padding
SizeAllocate/Free
图2-1 Allocated
SizeAllocate/Free
Pre
Next
padding
SizeAllocate/Free
图2-2 Free

该结构和implicit中结构类似,但是多了指向前空闲块和后空闲块的指针,这样就不需要再遍历已经被使用的块了,从空间占用来看,管理的最小要是16字节。

3.Segregated free list

块结构和上面Explicit并没有什么区别,其改进在于按照块大小分为多个链表,类似stl中分配器的实现。

4.Red-Black Tree

可以使用红黑树(红黑树插入删除不在此介绍)来进行内存管理,其结构在Explicit上增加指向父节点的指针,增加查找效率,其空间占用应为24。

5.分配和合并

对于分配而言有着两种方式,一种是首次匹配(即找到就分配,容易出现碎片),一种是最优匹配(每次都找最合适的)。合并即每次free需要检查前后是否也为空闲即能合并为大块。

6.整合

可以将大小进行分类,为8的通过implicit来进行管理,16的通过explicit管理。其余通过red-black tree管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习随笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值