#slab #object #cache #allocator #memory-allocator

nightly no-std slab-alloc

一个快速的单线程对象分配器

2个版本

使用旧的Rust 2015

0.1.1 2017年9月3日
0.1.0 2017年9月3日

#42 in #slab

Apache-2.0

235KB
4K SLoC

slab-alloc

slab分配器。这个crate实现了一个基于Jeff Bonwick的The Slab Allocator: An Object-Caching Kernel Memory Allocator的设计。

slab分配器是一个对象分配器 - 它分配和缓存固定类型的对象,并比通用分配器提供了性能提升。这个crate中实现的分配器类型实现了在object-alloc crate中定义的ObjectAllocUntypedObjectAlloc特质。这个crate中实现的slab分配器目前是单线程的,并且不能被并发访问。


lib.rs:

一个在连续slab中分配对象并缓存构造对象的ObjectAlloc

设计

SlabAlloc主要基于最初在SunOS 5.4内核中引入的slab分配器设计,并在The Slab Allocator: An Object-Caching Kernel Memory Allocator中进行了详细描述。这个实现与原始设计保持了一定的真实性,尽管它包括了一些性能改进和针对用户空间的修改。

SlabAlloc提供了许多性能优势

  • 与任何ObjectAlloc一样,对象缓存可以减少在许多情况下对象初始化的开销。
  • 与任何ObjectAlloc一样,只需要分配特定大小和对齐的对象,允许进行通用分配器不可用的优化。
  • 内部和外部碎片化都保持在最小。
  • 原始论文第4节中描述的“着色”方案提高了缓存利用率。

依赖关系

~0.8–1MB
~17K SLoC