3 个版本
0.1.2 | 2024年2月29日 |
---|---|
0.1.1 | 2023年12月25日 |
0.1.0 | 2023年3月11日 |
#256 在 内存管理 中
用于 moto-runtime
42KB
969 行
frusa
快速Rust系统分配器
这是什么?
core::alloc::GlobalAlloc (Rust) 的另一种实现
为什么?
系统分配器应该足够快,应该能够请求更多内存,并允许内存回收。我在2023年初需要它,当时在crates.io上找不到符合要求的任何分配器。
目标
- 快速且高效的分配/释放小块内存
- 无std
- 可以作为
#[GlobalAllocator]
使用 - 相对简单且高效的扩展/回收
非目标
- 不关心大内存块:这留给后端分配器处理
- 成为最快的分配器目前不是目标;相对低开销和高效的回收更重要
那么它是否快速?准备好使用了吗?
- 目前不如malloc或内核slabs快,但仍然不错
- 回收工作(按需)
- 在x64上测试过
- 未在arm64或其他架构上测试过
一个简单的基准测试
$ cargo test --release concurrent_speed_test -- --nocapture
[...]
------- FRUSA Allocator ---------------
concurrent speed test: 1 threads: 59.48 ns per alloc/dealloc; throughput: 16.81 ops/usec
concurrent speed test: 2 threads: 198.80 ns per alloc/dealloc; throughput: 10.06 ops/usec
concurrent speed test: 4 threads: 465.11 ns per alloc/dealloc; throughput: 8.60 ops/usec
concurrent speed test: 8 threads: 1339.12 ns per alloc/dealloc; throughput: 5.97 ops/usec
------- Rust System Allocator ----------
concurrent speed test: 1 threads: 19.54 ns per alloc/dealloc; throughput: 51.17 ops/usec
concurrent speed test: 2 threads: 22.67 ns per alloc/dealloc; throughput: 88.22 ops/usec
concurrent speed test: 4 threads: 23.47 ns per alloc/dealloc; throughput: 170.44 ops/usec
concurrent speed test: 8 threads: 26.92 ns per alloc/dealloc; throughput: 297.21 ops/usec
------- Talc System Allocator ----------
concurrent speed test: 1 threads: 41.85 ns per alloc/dealloc; throughput: 23.89 ops/usec
concurrent speed test: 2 threads: 311.50 ns per alloc/dealloc; throughput: 6.42 ops/usec
concurrent speed test: 4 threads: 697.42 ns per alloc/dealloc; throughput: 5.74 ops/usec
concurrent speed test: 8 threads: 2196.38 ns per alloc/dealloc; throughput: 3.64 ops/usec
依赖项
~205KB