malloc的最佳启发式

时间:2011-01-03 18:37:31

标签: algorithm memory-management operating-system malloc heuristics

考虑使用malloc()在碎片堆中分配x个字节的内存。假设堆有多个大小大于x字节的连续位置。

哪个是最好的(导致最少的堆浪费)启发式选择以下位置?

  1. 选择大于x字节的最小位置。
  2. 选择大于x字节的最大位置。
  3. 我的直觉是比x字节大的最小位置。我不确定哪种是最好的。

    不,这不是任何作业问题。我正在读这个How do malloc() and free() work?,这看起来像是一个很好的后续问题。

3 个答案:

答案 0 :(得分:5)

在一个混合了不同大小的分配的通用堆中,然后在两个中我将分配放在可以容纳它的最小块中(以避免在我们之前减少我们可以分配的最大块的大小)需要)。

还有其他实现堆的方法会使这个问题变得不那么重要(例如Doug Lea的流行dlmalloc - 它会在相同大小的块中汇集块来提高速度并减少整体碎片)。 / p>

哪种解决方案最好总是归结为应用程序执行内存分配的方式。如果您事先知道应用程序模式,那么您应该能够在规模和速度上击败通用堆。

答案 1 :(得分:4)

最好选择最小的位置。想想未来的malloc请求。你不知道他们会是什么,你想要满足尽可能多的请求。因此,最好找到一个完全符合您需求的位置,以便将来可以满足更大的请求。换句话说,选择最小的位置可以减少碎片。

答案 2 :(得分:3)

您列出的启发式算法分别用于最佳拟合和最差拟合算法。还有First Fit算法,它只需要找到足够大的第一个空间。它与Best Fit一样好,而且速度更快。