chapter17

hisun9發表於2024-11-09

malloc.py引數

img

中文版

img

第一題

問題

1.首先執行 flag -n 10 -H 0 -p BEST -s 0 來產生一些隨機分配和釋放。你能預測malloc()/free()會返回什麼嗎?你可以在每次請求後猜測空閒列表的狀態嗎?隨著時間的推移,你對空閒列表有什麼發現?

img
img

空閒列表不會合並,導致外部碎片越來越多

第二題

問題

2.使用最差匹配策略搜尋空閒列表(-p WORST)時,結果有何不同?什麼改變了?

img
img

因為每次找最大的匹配,空閒列表又不會合並,所以容易產生更多的外部碎片

第三題

問題

如果使用首次匹配(-p FIRST)會如何?使用首次匹配時,什麼變快了?

img
img

搜尋空閒列表的時間變少了

第四題

問題

對於上述問題,列表在保持有序時,可能會影響某些策略找到空閒位置所需的時間。使用不同的空閒列表排序(-l ADDRSORT,-l SIZESORT +,-l SIZESORT-)檢視策略和列表排序如何相互影響。

使用-p BEST -l ADDRSORT

img
img

使用-p BEST -l SIZESORT +

img
img

使用-p BEST -l SIZESORT -

img
img

使用-p WORST -l ADDRSORT

img
img

使用-p WORST -l SIZESORT +

img
img

使用-p WORST -l SIZESORT -

img
img

使用-p FIRST -l ADDRSORT

img
img

使用-p FIRST -l SIZESORT +

img
img

使用-p FIRST -l SIZESORT -

img
img

對於最優匹配和最差匹配,如果不調整演算法,時間不會有影響。(但是一般應該對應調整演算法)

同時注意插入空閒塊時需要插入空閒列表,來達成某種排序方式,所以在free操作時會消耗更多時間。

第五題

問題

合併空閒列表可能非常重要。增加隨機分配的數量(比如說-n 1000)。隨著時間的推移,大型分配請求會發生什麼?在有和沒有合併的情況下執行(即不用和採用-C 標誌)。你看到了什麼結果差異?每種情況下的空閒列表有多大?在這種情況下,列表的排序是否重要?

太長了,只給出命令,分別用這兩條命令跑一遍就知道了

python malloc.py -n 1000 -c
python malloc.py -n 1000 -C -c

這裡給出最後的空閒列表狀態:

對於第一條命令

img

對於第二條命令

img

如果沒有合併。那麼空閒列表會有很多外部碎片,可能沒有辦法使用大型分配請求。

有合併則正常使用。

第六題

問題

將已分配百分比-P 改為高於 50,會發生什麼?它接它 100 時分配會怎樣?接它 0會怎樣?

使用 -P 100

img

使用 -P 0

img

P越高,分配操作越多,剩餘空間越少

第七題

問題

要生成高度碎片化的空閒空間,你可以提出怎樣的具體請求?使用-A 標誌建立碎片化的空閒列表,檢視不同的策略和選項如何改變空閒列表的組織

有很多種方法,這裡給出兩種思路:

執行很多分配操作,且不執行free(釋放)操作即可

使用最差適應演算法申請大量空間大小為1的塊,然後釋放,且不合並即可