malloc.py
参数
中文版
第一题
问题
1.首先运行 flag -n 10 -H 0 -p BEST -s 0 来产生一些随机分配和释放。你能预测malloc()/free()会返回什么吗?你可以在每次请求后猜测空闲列表的状态吗?随着时间的推移,你对空闲列表有什么发现?
空闲列表不会合并,导致外部碎片越来越多
第二题
问题
2.使用最差匹配策略搜索空闲列表(-p WORST)时,结果有何不同?什么改变了?
因为每次找最大的匹配,空闲列表又不会合并,所以容易产生更多的外部碎片
第三题
问题
如果使用首次匹配(-p FIRST)会如何?使用首次匹配时,什么变快了?
搜索空闲列表的时间变少了
第四题
问题
对于上述问题,列表在保持有序时,可能会影响某些策略找到空闲位置所需的时间。使用不同的空闲列表排序(-l ADDRSORT,-l SIZESORT +,-l SIZESORT-)查看策略和列表排序如何相互影响。
使用-p BEST -l ADDRSORT
使用-p BEST -l SIZESORT +
使用-p BEST -l SIZESORT -
使用-p WORST -l ADDRSORT
使用-p WORST -l SIZESORT +
使用-p WORST -l SIZESORT -
使用-p FIRST -l ADDRSORT
使用-p FIRST -l SIZESORT +
使用-p FIRST -l SIZESORT -
对于最优匹配和最差匹配,如果不调整算法,时间不会有影响。(但是一般应该对应调整算法)
同时注意插入空闲块时需要插入空闲列表,来达成某种排序方式,所以在free操作时会消耗更多时间。
第五题
问题
合并空闲列表可能非常重要。增加随机分配的数量(比如说-n 1000)。随着时间的推移,大型分配请求会发生什么?在有和没有合并的情况下运行(即不用和采用-C 标志)。你看到了什么结果差异?每种情况下的空闲列表有多大?在这种情况下,列表的排序是否重要?
太长了,只给出命令,分别用这两条命令跑一遍就知道了
python malloc.py -n 1000 -c
python malloc.py -n 1000 -C -c
这里给出最后的空闲列表状态:
对于第一条命令
对于第二条命令
如果没有合并。那么空闲列表会有很多外部碎片,可能没有办法使用大型分配请求。
有合并则正常使用。
第六题
问题
将已分配百分比-P 改为高于 50,会发生什么?它接它 100 时分配会怎样?接它 0会怎样?
使用 -P 100
使用 -P 0
P越高,分配操作越多,剩余空间越少
第七题
问题
要生成高度碎片化的空闲空间,你可以提出怎样的具体请求?使用-A 标志创建碎片化的空闲列表,查看不同的策略和选项如何改变空闲列表的组织
有很多种方法,这里给出两种思路:
运行很多分配操作,且不执行free(释放)操作即可
使用最差适应算法申请大量空间大小为1的块,然后释放,且不合并即可