5个版本
使用旧的Rust 2015
0.2.2 | 2016年7月31日 |
---|---|
0.2.1 | 2016年7月24日 |
0.2.0 | 2016年7月22日 |
0.1.1 | 2015年5月2日 |
0.1.0 | 2015年5月2日 |
#650 in 内存管理
19KB
361 行
块分配器
这是一个基本的、线程安全的、固定大小的区域,可以分配指定大小的可重用块。可重用意味着这不是一个一次性的基本区域,块是可释放和可重新分配的。此分配器的预期用例是多线程服务,这些服务经常分配和释放均匀的内存块,例如Web服务器或视频游戏。它可以无限期运行而不会因碎片化而损失性能。
目前它将分配与分配器本身的生命周期绑定的可变u8切片,或者原始*mut u8指针。
其当前限制是它只能在64位架构上工作,并且它只能管理UINT32_MAX - 1个块,因为它使用一对32位数字进行偏移管理。在未来某个时候通过一些重构到原子操作后,这两个限制都将被消除。
它目前运行相当快,在并发运行时,它可以在28纳秒内分配和释放,无论缓冲区或区域的大小如何。
要使用它,只需构造一个新的分配器,指定块的大小和分配器要管理的块数(请注意,此数字在运行时不可增长,因此请谨慎选择)
// create blocks of size 256 with a max of 100
let myalloc = Allocator::new(256, 100).unwrap();
然后您可以随心所欲地进行分配和释放
let buf : &mut [u8] = myalloc.alloc();
myalloc.free(buf);
or
let ptr : *mut u8 = myalloc.alloc_raw();
myalloc.free_raw(ptr);
依赖项
~205KB