#blocks #allocator #arena #thread-safe #alloc #sized #numbers

nightly block_allocator

线程安全的固定大小分配器,用于提供可重用块

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

块分配器

crates.io

Build Status

这是一个基本的、线程安全的、固定大小的区域,可以分配指定大小的可重用块。可重用意味着这不是一个一次性的基本区域,块是可释放和可重新分配的。此分配器的预期用例是多线程服务,这些服务经常分配和释放均匀的内存块,例如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