前言
内容仅作记录,请谨慎参考
17.1
题目描述
分析及解答
使用命令:./malloc.py -n 10 -H 0 -p BEST -s 0来产生随机分配和释放:
可以看到,模拟程序模拟了一块大小为100的空间,
基地址为1000,头部的大小为0,同时采用最优匹配的匹配策略。
第一次分配大小为3的空间,将会返回1000,此时List有一个块大小为97
free之后将会返回0,此时List有两个块大小分别为3、97;
第二次分配大小为5的空间,将会返回1003,此时List有两个块大小分别为3、92
free之后将会返回0,此时List有三个块大小分别为3、5、92
第三次分配大小为8的空间,将会返回1008,此时List有三个块大小为3、5、84
free之后将会返回0,此时List有四个块大小分别为3、5、8、84
第四次分配大小为8的空间,根据最优分配的规则,将会返回1008,此时List有三个块大小为3、5、84,free之后将会返回0,此时List有四个块大小分别为3、5、8、84
第五次分配大小为2的空间,根据最优分配,将会返回1000,此时List有四个块大小分别为1、5、8、84
第六次分配大小为7的块,根据最优分配,将会返回1008,此时List有四个块大小分别为1、5、1、84
使用命令:./malloc.py -n 10 -H 0 -p BEST -s 0 -c来查看模拟的结果:
可以看到结果与上述分析一致,同时我们会发现,随着时间的推移,空闲的块并不会合并,这将会导致碎片越来越多
17.3
题目描述
分析及解答
使用命令:./malloc.py -n 10 -H 0 -p FIRST -s 0 -c来查看使用首次分配的结果:
可以看到,相比BEST分配策略,使用FIRST分配策略进行分配时searched的元素将会减少,也就是说由于首次分配只需要找到第一个足够大的空闲块即可,不需要像最优分配那样每次遍历所有的空闲块,所以在查找空闲块花费的时间将会大大减少。
17.4
题目描述
分析及解答
对比不同分配策略、不同空闲列表排序方式下的分配情况可以看出:
不同的空闲列表排序方式对最优(BEST)和最差(WORST)分配这种分配策略的效率没有影响
而对于像首次(FIRST)分配这样的分配策略,不同的空闲列表排序方式将会影响其分配策略的效率
这与分配策略的具体思路是相关的:最优和最差分配无论空闲块如何排列,每次分配都需要遍历所有的空闲块,而首次分配只需要找到首个足够大的空闲块,所以与空闲块的排列有关。
具体的模拟结果见以下截图:
BEST分配策略:
FIRST分配策略:
WORST分配策略: