2个版本
使用旧的Rust 2015
0.1.1 | 2017年9月3日 |
---|---|
0.1.0 | 2017年9月3日 |
#42 in #slab
235KB
4K SLoC
slab-alloc
slab分配器。这个crate实现了一个基于Jeff Bonwick的The Slab Allocator: An Object-Caching Kernel Memory Allocator的设计。
slab分配器是一个对象分配器 - 它分配和缓存固定类型的对象,并比通用分配器提供了性能提升。这个crate中实现的分配器类型实现了在object-alloc crate中定义的ObjectAlloc
和UntypedObjectAlloc
特质。这个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