动态内存分配的数据结构


12

想想细胞探针模型。是否有一种数据结构可以分配任何长度的连续内存块(例如,C中的malloc)并释放它们,同时避免内存分段,并在最坏情况下确定性O(log n)时间执行每个操作,其中n为内存的总大小?

通过避免内存分段,我的意思是,如果空闲单元的总数为F,那么我应该能够分配F个单元或大约F个单元的连续段。

Answers:


6

即使没有时间限制,也无法“避免内存分段”,除非您可以像压缩垃圾收集器中那样移动分配的对象。请参阅Robson的“有关动态存储分配的某些功能的界限”,该文章显示在到之间的块中分配个字节需要个字节的内存。mnNΩ(mlog(N/n))

此外,伙伴系统可以达到此界限,并且可以在对数时间内完成。


感谢您的参考。我确实允许移动分配的对象(否则,拿出一个不好的例子看起来很容易)。您提到的下限是否仍然适用?
Manu 2015年

据我所知。您可能要发布有关此问题的新问题,因为它与malloc的实际运行方式非常不同。例如,您必须考虑的一个问题是,您将为移动大小为的块分配多少时间成本。您可以在Bender等人的“维护连续对象的数组”中阅读有关此内容的内容。m
jbapple

请注意,如果移动块的成本在大小上是线性的,并且如果块在malloc / free的调用之间必须是连续的,则在最坏情况下花费时间的算法永远无法移动大块摆放在。结果,像Robson所描述的那样的模式仍然可能,从而迫使使用超线性空间。O(logn)
jbapple

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.