Arena 内存分配器 及 Rust crate 推荐

Arena 指的是预先分配一大片内存空间,并且可以一次性释放掉整个内存空间。

目标是使分配和释放更快,一次性申请的内存空间是连续的,有助于缓存局部性策略。

分配速度更快,因为每个后续分配都是指针增量,而释放速度更快,因为您只需释放整个 arena,而不是其中的每个单独的东西。

crates

仅支持同个类型对象的分配

https://github.com/thomcc/rust-typed-arena

支持多类型对象的分配

https://crates.io/crates/bumpalo

能单独释放指定对象的分配

https://crates.io/crates/generational-arena

比较新的实现,可以学习源码,调用libc库mmap实现内存分配

https://github.com/emoon/arena-allocator

使用mem::MaybeUninit来分配内存

https://docs.rs/kioku/latest/kioku/

blogs

https://manishearth.github.io/blog/2021/03/15/arenas-in-rust/

应用场景

自定义了一个arena内存分配器

https://github.com/monadbobo/skiplist-rust

如何利用arena构造循环引用的结构

https://www.less-bug.com/posts/rust-arena-allocator-usage-practice/

对比

https://crates.io/crates/tikv-jemallocator

参考

  1. https://www.reddit.com/r/rust_gamedev/comments/1esovyb/comment/li8h3nj/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
posted @ 2025-02-12 23:15  yihailin  阅读(180)  评论(0)    收藏  举报