2个不稳定版本
0.2.1 | 2024年3月25日 |
---|---|
0.2.0 |
|
0.1.1 |
|
0.1.0 | 2022年11月16日 |
#134 in 内存管理
在boing中使用
25KB
512 行
牧马人
基于bumpalo的未类型化区域
- 区域:一个允许大量解分配的分配器对象
- 未类型化:与
typed_arena
不同,相同的分配器对象可以用来分配任何类型 - 删除:对分配数据的任何删除都将被调用,与
bumpalo
不同
⚠️ 警告
目前Rodeo只支持所有者类型。
感谢@TimNN和MIRI指出我的短视。
示例
use rodeo::Rodeo;
struct S;
impl Drop for S {
fn drop(&mut self) {
println!("dropping S");
}
}
{
let rodeo = Rodeo::new();
let n = rodeo.alloc(42);
let r = rodeo.alloc(S);
}
打印dropping S
功能和#[no_std]
支持
-
bumpalo
(默认)如果没有选择,您将需要连接自己的实现了
ArenaAlloc
特质的分配器。 -
std
(默认)目前,
rodeo
主要是一个no_std
crate。但std
使调试变得简单得多!
您必须使用default-features = false
退出bumpalo
和std
。
安全性
作为内存管理库,此代码广泛使用unsafe
。但是,代码经过测试,并使用Miri进行动态验证。
验证策略
测试
只需运行以下测试
cargo test
Miri
Miri是MIR(Rust的中间表示)的解释器,它检查Rust代码,特别是unsafe代码,并与实验性的堆栈借用内存模型进行核对。
截至 miri 0.1.0 (c1a859b 2022-11-10)
,当与Miri一起运行时,Rodeo的测试没有显示错误或警告。
rustup +nightly component add miri # if needed
cargo +nightly miri test
LEAK=1 cargo +nightly miri test # should leak two buffers
待办事项
-
添加泛型DST分配,隐藏在Rust RFC 2580的特性待稳定化之后
-
调查
rodeo
在自引用结构中的应用
许可证
Rodeo是在MIT许可证和Apache许可证(版本2.0)的条款下分发的。请参阅LICENSE-MIT和LICENSE-APACHE。
依赖关系
~245KB