3

我正在考虑是否可以消除 Knuth 内存堆上的外部碎片?在尝试解决这个问题之前,我不确定我们是否可以在堆上移动块。如果我们可以移动块,那么我相信解决外部碎片是微不足道的。

我对这个问题做了一些思考。如果我只是将所有内容复制到新位置(虚拟地址),然后将之前指向该块的所有指针更新为新地址,会有什么问题?我认为这可能是一个正确的解决方案,但我不是很自信。

有人对这个问题有任何想法吗?

提前致谢。

4

1 回答 1

1

这听起来很正确——您只需要在复制之前检查您是否能够实际分配足够的内存(或者是否存在足够的预分配内存)。除此之外,我想不出你会遇到什么问题。似乎继续更新所有指针会相当慢——如果你需要扫描整个堆,这不是你想要更新的每个块的 O(n) 吗?

于 2012-01-30T20:35:44.210 回答