ICS malloc lab总结
lab要求
你要实现一个malloc系列函数,并且实现比较好的性能以获得分数,衡量函数性能的标准为内存空间利用率(util,总共61分)及分配算法的时间复杂度(thru,总共39分)。
PKU的标准是92% util+13000Kops thru是满分,如果你某一项少了就要扣分,但是如果你某一项少到一定程度或者某一个应该分配成功的trace分配失败了(往往因为为了追求thru而造成过多的外部和内部碎片),那么你的整个lab就0分了。
注意:thru吞吐量单位为每秒,而不是每时钟周期,所以不同人电脑上CPU主频不一样, 所以同样的程序在不同电脑上得分不一样, 不过不用担心不公平,因为最后得分都是以服务器主频为标准的。
lab主要解法
历史上大家都认为为了得到满分(98+/100),写一个单个操作平均复杂度O(logN)的BST是必要的,甚至有时候BST退化严重的话,是得不到满分的,所以只有平衡树比较保险。(所以很多人做之前先参考网上代码,写了一个平衡树,导致malloc lab网上流传的答案全是平衡树或BST版本,大家为了拿满分,都采用了平衡树,代码也都差不多。
当然,学习别人的代码在自己写是没有问题的,但是希望大家不要抄袭,像malloc lab你自己写和抄袭别人的代码再改一改(封装一些语句为函数,把代码改写为同义语句,改变模块顺序等伎俩),根本骗不过Stanford moss查重系统,而shell lab被发现相似度高问题还不大