![]() |
1
2
C编程环境使用标准C库提供的malloc实现,该库随操作系统一起提供 Doug Lea's memory allocator (被称为 DLMALLAC )在大多数的内存分配器中以一种或另一种形式在Unix系统上使用最广泛。 DLMALLAC 使用不同大小的容器来容纳对象-最接近对象大小的容器用于分配对象。 freebsd使用一个新的多线程内存分配器 杰莫洛克 设计为并发和线程安全,在当今多核系统中使用时提供了良好的性能特性。可以找到旧malloc和新的多线程malloc的比较 here . 即使它是多线程的,它仍然使用不同大小的块的概念来根据对象的大小容纳对象(最接近对象大小的块用于分配对象)。 在Unix内核中,最流行的内存分配器是 Slab分配器 由Sun Microsystems推出。这个 slab allocator 使用称为slabs的大内存块。这些板被划分为不同大小的对象(或池)的缓存。每个对象都是从包含与其大小最接近的对象的缓存中分配的。 正如您所注意到的,上面的bin/chunks/slab缓存只是 最佳拟合 算法。因此,您可以很容易地假设“最佳匹配”算法是使用最广泛的malloc算法之一(尽管内存分配器在其他重要方面有所不同)。 |