【问题标题】:Can defragmentation be done on a Knuth heap?可以在 Knuth 堆上进行碎片整理吗?
【发布时间】:2012-02-22 14:53:43
【问题描述】:

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

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

有人知道这个问题吗?

提前致谢。

【问题讨论】:

  • 不,不是。但这与我正在学习的课程有关。我问这个问题只是出于好奇。

标签: c++ c memory heap-memory defragmentation


【解决方案1】:

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

【讨论】:

  • 如果有效的话应该会很慢。我只是好奇它是否可以工作。谢谢你的回答。
猜你喜欢
  • 2018-01-17
  • 2016-03-12
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 2018-01-03
  • 2014-06-22
  • 2013-07-27
相关资源
最近更新 更多