我想实现的malloc()用C类的,我不能决定一个块是否应该被添加到空闲列表的末尾或空闲链表的头。哪个更好,为什么?我使用的列表是一个双向链表,并且(现在)是无序的。是保持释放的块列表中动态内存分配时,最好使用LIFO顺序或先进先出的顺序?
0
A
回答
0
两者之间的差异不应该很明显(如果存在的话):块的分配和释放顺序取决于用户(使用malloc的程序员),因此您可以将其视为随机。
制造至少一种有序列表的大小。
看看一些其他技术,如果你真的想要的东西快,例如,实现buddy system。
+0
感谢您的帮助。另外,我的教科书提到,在分配器使用第一个拟合算法时,按地址顺序维护列表的内存利用率优于LIFO顺序中的列表,但这并不能解释原因。它是否更容易合并块,或者是否有其他原因? – David
3
没有运行的基准测试中,最可能的选择产生最佳性能FIFO,自由表头即放释放的块。
这是因为FIFO最有可能提供temporal locality of reference,因为刚释放的块更可能驻留在CPU缓存中,而不是先前释放的块并且不会在较长时间段内使用。
相关问题
- 1. 释放先前分配的内存后程序中止
- 2. 图标的优先行动栏上(保持项目的顺序)
- 3. 按照最近或最近的日期先后顺序获取排序列表
- 4. Java优先顺序
- 5. CSS优先顺序
- 6. CSS优先顺序
- 7. JavaScript中a = b == c的顺序优先顺序是什么?
- 8. PyYAML - 是保存列表的顺序吗?
- 9. 如何颠倒ng表中列的排序顺序(先升序)?
- 10. 数组或列表中的项目是否保持其顺序?
- 11. Spark的RDD.combineByKey()是否保留先前排序的DataFrame的顺序?
- 12. 保证线程执行顺序是先到先服务
- 13. 建筑内核或世界的先后顺序是否重要?
- 14. 即使奇数排序,首先按出现顺序保持赔率Java
- 15. 打印样式表的优先顺序
- 16. 样式表的优先顺序
- 17. 解释执行java代码的顺序或优先级?
- 18. 保持列表的顺序node.js
- 19. 在进行顺序计算时保持操作顺序
- 20. 使用变更时Java正则表达式的优先顺序
- 21. 关于优先顺序(C++)
- 22. 路由优先级顺序
- 23. 一元++优先顺序
- 24. 在HTML中排列表列的优先顺序
- 25. 排序向量的列表字典顺序根据优先级
- 26. 释放动态分配的内存
- 27. 休眠注释:映射一个保持顺序的列表
- 28. Seq.groupBy是否在组内保持顺序?
- 29. WCF服务中的优先顺序
- 30. MySQL按优先顺序排列
都去尝试一下,并运行一些性能/使用测试? (这应该回答至少两个问题......) – 2011-10-16 04:06:49
@pst:他应该运行什么样的测试? – Gabe