Malloc Lab 记录

by Gu Wei
2021年11月

1. 准备

该实验主要是让我们模拟一个动态分配器,实现mm_initmm_mallocmm_freemm_realloc函数。handout里提供了两个简单的验证文件short1-bal.repshort2-bal.rep来测试我们算法的内存利用率和吞吐量,可以调用./mdriver -f short1-bal.rep -V来查看单个文件的测试结果。该课程的其他测试数据可以从GitHub下载,得到一个trace文件夹,然后调用./mdriver -t ./trace -V来查看测试结果。

本实验只需要看书Section 9.9就可以完成了。书上给出了采用first hit policy隐式空闲链表的实现,而懒惰的我稍微改改抄抄就完成了next fit policy的隐式空闲链表。

2. 代码

事实上只需要写mm_realloc函数以及修改find_fit就可以了。其他函数要么在文本中有,要么在课后练习的答案中有。

3. 测试

trace9和trace10测试了mm_realloc函数,可见mm_realloc函数的空间利用率(util)相当的低。这是因为我们的实现相当的naive。如果想要提高空间利用率,可以realloc时先尝试合并前后空闲块,并尝试在原先的位置放置数据。但是懒惰的我不想再为此写一个coalesce函数了。

4. 就这?

对书上代码的稍微修改就可以达到83/100的分数,此时可能只用了半天不到的时间。但是这个lab其实远不只如此。malloclab的实现还有以下几种选择:

个人认为如果想要实现分离适配的话,应该算是所有实验中编程量和编程难度最大的一个lab了。

5. 写在后面

本人于2021/11/14水完了malloc lab,用时一天左右。malloc lab其实相当有挑战性,只不过懒惰的我明白放弃其实是种智慧。最后一个poxy lab应该不会做了,套接字可能就直接上自顶向下了。可能本篇作为所有lab的收尾有点心不甘,但是又何妨。最后以csapp官网的一句话收尾malloc lab:

One of our favorite labs. When students finish this one, they really understand pointers!