实验要求实现内存分配功能,关于内存分配的方法机制已经非常多了,本文主要尝试使用红黑树来实现内存空间的管理和分配,完整代码可见GitHub

原理

内存块

对于一个内存块来说,除了本身内存区域之外,通常还需要保存区域大小和是否空闲等信息。在内存管理过程中,通常需要合并相邻的内存空间,为了方便检查相邻空间的大小和空闲状态,内存块信息在头部和尾部各保留一份。需要注意的是,内存区大小包含了头部和尾部的占用空间。

Block size
Block size
0 0 a
0 0 a
Payload
(allocated block only)
Payload<div>(allocated block only)</div>
Padding (optional)
Padding (optional)
3 2 1 0
3 2 1 0
31
31
a = 1: Allocated
a = 0: Free
[Not supported by viewer]
Block size
Block size
0 0 a
0 0 a
Header
Header
Footer
Footer

Continue reading