1

我听说'better-fit'很常用,但我似乎没有在网上阅读太多关于它的内容。堆分配器最常用/被认为是最有效的策略是什么。

(我承认我的词汇可能有缺陷;当我说“政策”时,我的意思是“最适合”、“第一次适合”、“下一次适合”等)

编辑:我也对“更适合”的堆策略和 doug lea 的策略(http://gee.cs.oswego.edu/dl/html/malloc.html)的比较特别感兴趣。Doug 使用一种最佳拟合,但他的方法使用索引箱,而更好的拟合使用笛卡尔树。

4

1 回答 1

2

C 编程环境使用操作系统附带的标准 C 库提供的 malloc 实现Doug Lea 的内存分配器(称为dlmalloc)中的概念在 UNIX 系统上以一种或另一种形式的大多数内存分配器中使用最为广泛。dlmalloc使用不同大小的 bin 来容纳对象 - 最接近对象大小的 bin 用于分配对象。

FreeBSD 使用一种称为jemalloc的新的多线程内存分配器,它被设计为并发和线程安全的,在当今的多核系统中使用时提供了良好的性能特征。可以在这里找到旧 malloc 和新多线程 malloc 的比较。即使它是多线程的,它仍然使用不同大小的块的概念来根据对象的大小来容纳对象(最接近对象大小的块用于分配对象)。

在 UNIX 内核中,最流行的内存分配器是Slab 分配器,它是由 Sun Microsystems 引入的。平板分配器使用称为平板的大块内存。这些slab在不同大小的对象(或池)的缓存中划分。每个对象都是从包含与其大小最接近的对象的缓存中分配的。

正如你所注意到的,上面的 bin/chunks/slab 缓存只是最适合算法的形式。因此,您可以轻松假设“最佳拟合”算法是使用最广泛的 malloc 算法之一(尽管内存分配器在其他重要方面有所不同)。

于 2010-06-01T04:33:10.423 回答