因此,作为操作系统课程的一部分,我实现了一个内存分配器(就像C中的malloc一样)。可用空间存储在链接列表中。内存碎片测试
我在接下来的问题:我将如何去测试各种分配策略(例如,首次拟合,最佳拟合和最差拟合)。现在我只是迭代预定义的次数,每次分配一个大小为1-N字节的块,其中N大约是20000.基本上,我分配了一些迭代,然后通过释放一些分配来切换它块。在退出之前,我检查freelist并计算外部碎片。我不确定这是否是要走的路,或者是否有更好的应对措施?
为每个策略选择随机块大小的一个问题是,如果分配的块大小不同,则无法真正地比较它们,对吗?因此,替代方案将执行相同的测试,只是现在我使用相同的分配大小并在测试每个策略时释放相同的块。
希望这不是混乱的:)
如果您的分配器的空闲()合并相邻的块,则碎片的数量将等于freelist(加号或减号) – wildplasser
@wildplasser上的项目数。感谢您的回复:)我知道这:)实际上我已经有一个计算外部碎片的工作实现。我更感兴趣的是知道用于测试不同策略的应用是否足够,或者有更好的方法来做到这一点? –
也许最有用的测量方法是计算正在使用的实际页面的数量,以及有效页面的数量,以及它们的比例。另一种措施可能是虚拟地址的有效与实际范围(最大(地址) - 最小(地址)),地址空间也是一种有价值的资源。 – wildplasser