繁体   English   中英

malloc的最佳启发式

[英]Best heuristic for malloc

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

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

  1. 选择大于x字节的最小位置。
  2. 选择大于x字节的最大位置。

我的直觉是比x字节大的最小位置。 我不确定哪种是最好的。

不,这不是任何转让问题。 我正在读这个怎么做malloc()和free()工作? 这看起来像是一个很好的跟进问题。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM