2个不稳定版本

0.2.1 2024年3月25日
0.2.0 2022年12月2日
0.1.1 2022年11月18日
0.1.0 2022年11月16日

#134 in 内存管理


boing中使用

MIT/Apache

25KB
512

牧马人

Rust Docs Rust Build Status Rust Nightly Build Status

基于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退出bumpalostd

安全性

作为内存管理库,此代码广泛使用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-MITLICENSE-APACHE

依赖关系

~245KB