(C)最常用的堆策略是什么?

时间:2010-06-01 03:47:52

标签: c heapalloc policies

我听说'更合适'是很常用的,但我似乎并没有在网上阅读太多。什么是最常用/被认为是堆分配器使用的最有效的策略。

(我承认我的词汇可能存在缺陷;当我说'政策'时,我的意思是'最适合','先适合','下一次适合'等等。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

相关问题