
Essay2026 / 05 / 05
Malloclab
该Lab对应CSAPP第九章的内存管理部分。所以你应该看不太到虚拟内存相关的东西 在这里你需要自己实现内存管理器,并提供malloc,free等内存分配函数给用户。 同时做到处理请求的高性能与内存高利用率的平衡。
原理设计
由于C允许用户决定何时malloc与free,还有指针的暴露。所以我们的内存分配上无法做到移动已分配块以合并出大块的未使用块,还有就是多次响应用户的free不能自己自己做一次全局的free。等等。 所以这算是内存管理的两道枷锁
- 已分配块不能移动
- 必须实时响应用户的free,同时选择合适时机进行“整理”,而不能自己选择free的位置与时机。
碎片与利用
由于这两道枷锁,内存碎片成为一个棘手的问题。一种是硬性要求带来的内部碎片,还有一种就是用户随时的free带来的外部碎片。 其中外部碎片是带来内存低利用的首要因素。我们必须保证我们能够标识出哪些空闲哪些占用,并且识别到可合并的空闲块合并他们,并在分配时先扫描是否有合适的空闲块,不够时再开辟新内存空间。
对齐
所以在这个模型下,我们规定硬性要求为双字对齐(8字节) 也就是说,我们开辟新空间,或者说利用空闲所占空间,其大小都应该是8字节的偶数倍。
块的数据结构
我们在用户malloc的时候返回给它指向块的指针,同时用户free的时候返回给我们