6个版本
0.4.4 | 2024年4月23日 |
---|---|
0.4.3 | 2023年8月29日 |
0.4.0 | 2023年6月7日 |
0.3.1 | 2023年4月3日 |
#175 in 内存管理
每月26次下载
29KB
698 代码行
rsbmalloc
一个用于Rust的分箱分配器。它相当简单,但单线程和多线程都相当快。单线程时通常与内置分配器相似,有时更快,但有时内存使用更高。多线程时,速度从相似到相当慢。
完全依赖于线程本地缓存以支持多线程。第一次分配时创建4倍的CPU数量,之后不再创建,因此每个“线程本地”缓存都是完全线程安全的,以防在线程之间重用。
rsbmalloc
完全是一个分箱分配器,箱从4字节到16 KiB(一些ARM页面大小是16 KiB)。如果一个分配大于16 KiB,它将被计为一个大型分配,并直接转到 mmap
和 munmap
。因此,在Rust中释放时,它会被 munmap
-ed。然而,箱按需一次分配一个页面,并且永远不会释放回操作系统。释放的槽位仅作为可以由同一线程(或得分相同的线程缓存的其他线程)重用的链表。
它实现了 GlobalAllocator
特性,并附带了一个单线程的 no_std
版本。no_std
版本仍然需要带有 mmap
和 munmap
的 libc 或 Windows,但它不依赖于Rust标准库。请注意,no_std
版本仍然是线程安全的,它只是不使用线程本地缓存,因此在多线程操作时速度会慢很多。另一方面,它使用的内存更少,如果没有锁竞争,速度会相似。一旦 allocator-api
稳定,它应该很容易移植到那里。
rsbmallocc
为 rsbmalloc
提供了一个稍微慢一些的C接口,包括标准名称(malloc
、free
)和前缀名称(rsbmalloc
、rsbfree
)。
rsbmalloc
还暴露了它底层的页面分配器。
这是一个Broch Web Solutions项目。
查看博客文章获取更多信息。
依赖项
~225KB