我正在寻找一种方法来实现Rust中的内存池.
我想以块的形式分配一组相关的小对象,并一次删除对象集.对象不会单独释放.这种方法有几个好处:
有没有办法在Rust中创建这样的分配器?
这听起来像你想要的类型竞技场板条箱,它是稳定的,可以在Rust 1.0中使用.
extern crate typed_arena;
#[derive(Debug)]
struct Foo {
a: u8,
b: u8,
}
fn main() {
let allocator = typed_arena::Arena::new();
let f = allocator.alloc(Foo { a: 42, b: 101 });
println!("{:?}", f)
}
Run Code Online (Sandbox Code Playgroud)
这确实有局限性 - 所有对象必须相同.在我的使用中,我有一小部分我希望拥有的类型,所以我刚刚创建了一组Arenas,每种类型一个.
如果这不合适,你可以看一下arena::Arena,它不稳定,比输入的竞技场慢.
两个分配器的基本前提很简单 - 你允许竞技场使用一个项目,它将位移动到它自己的内存分配.
"分配器"一词的另一个含义是在您设置值时使用的含义.计划Rust会在某些时候获得对"placement new"的支持,并且box语法是为此保留的.
在Rust的不稳定版本中,您可以执行类似的操作box Foo(42),并且(假设的)增强功能可以让您说出box my_arena Foo(42)使用指定分配器的内容.这个功能是远离现有的几个版本.
| 归档时间: |
|
| 查看次数: |
2882 次 |
| 最近记录: |