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的塊,然後釋放,且不合並即可