【发布时间】:2012-12-11 10:44:26
【问题描述】:
因此,作为我正在学习的操作系统课程的一部分,我实现了一个内存分配器(就像 C 中的 malloc 一样)。可用空间存储在链表中。
接下来我的问题是:我将如何测试各种分配策略(例如,最适合、最适合和最差适合)。现在我只是迭代预定义的次数,每次分配一个大小为 1-N 字节的块,其中 N 类似于 20000。基本上我分配一些迭代然后我通过释放一些分配的块。在退出之前,我检查了 freelist 并计算了外部碎片。我不确定这是否是要走的路,还是有更好的方法来做到这一点?
为每种策略选择随机块大小的一个问题是,如果分配的块大小不同,则无法真正比较它们,对吧?所以替代方案是执行相同的测试,只是现在我在测试每个策略时使用相同的分配大小并释放相同的块。
希望这不会让人困惑:)
【问题讨论】:
-
如果你的分配器的 free() 合并相邻的块,碎片的数量将等于 freelist 上的项目数(加或减一)
-
@wildplasser。感谢您的回复:) 我知道这一点:) 实际上我已经有一个计算外部碎片的工作实现。我更想知道我用于测试不同策略的方法是否足够……或者有更好的方法吗?
-
也许最有用的衡量标准是计算正在使用的实际页面数、有效页面数以及它们的比率。另一个衡量标准可能是虚拟地址的有效与实际跨度(最大(地址)-最小(地址)),地址空间也是一种宝贵的资源。
-
@wildplasser。确实不错的提示:)
标签: c memory-management fragmentation