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

Arena 内存分配器 及 Rust crate 推荐的更多相关文章

  1. Nah Lock: 一个无锁的内存分配器

    概述 我实现了两个完全无锁的内存分配器:_nalloc 和 nalloc.  我用benchmark工具对它们进行了一组综合性测试,并比较了它们的指标值. 与libc(glibc malloc)相比, ...

  2. php Allocator Jemalloc TCMalloc那个内存分配器比较好?

    php Allocator Jemalloc TCMalloc那个内存分配器比较好? php一键安装脚本可以选择是否安装内存优化 You have 3 options for your Memory ...

  3. 理解 glibc malloc:主流用户态内存分配器实现原理

    https://blog.csdn.net/maokelong95/article/details/51989081 Understanding glibc malloc 修订日志: 2017-03- ...

  4. Python内存分配器(如何产生一个对象的过程)

    目录 内存分配器 Python分配器分层 第零层--通用的基础分配器 第一层--低级内存分配器 内存结构 arena pool new arena usable_arenas和unused_arena ...

  5. Go内存分配器可视化指南【译】【精】

    当我第一次开始尝试理解 Go 语言的内存分配器时,整个过程让我抓狂.一切看起来都像一个神秘的黑盒子.因为几乎所有技术魔法(technical wizardry)都隐藏在抽象之下,所以你需要一层一层的剥 ...

  6. allegro设置内存分配器的一个坑

    看过<游戏引擎架构>后我开始对内存的分配问题关注,一直想用内存分配器来管理游戏的内存.前两天发现了有许多第三方内存分配器可以用.最后挑中了nedmalloc,这个库也是ogre所使用的,测 ...

  7. 14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器

    14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器 当InnoDB 被开发时,内存分配提供了操作系统和 run-time ...

  8. [转]STL的内存分配器

    题记:内存管理一直是C/C++程序的红灯区.关于内存管理的话题,大致有两类侧重点,一类是内存的正确使用,例如C++中new和delete应该成对出现,用RAII技巧管理内存资源,auto_ptr等方面 ...

  9. linux内存管理--伙伴系统和内存分配器

    3.1页框的管理 所有的页框描述符都存放在mem_map数组中. 3.1.1page数据结构 struct page { page_flags_t flags; //标志 atomic_t _coun ...

  10. 14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器

    14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器 当InnoDB 被开发, 内分配齐 提供了与操作系统和运行库往往缺乏 ...

随机推荐

  1. 使用 Scoop 安装 Mambaforge 踩坑指南

    为什么用 Scoop 安装 Mambaforge? Mambaforge 作为 Anaconda 的轻量级替代品,以其极速包管理能力脱颖而出.而 Scoop 则是 Windows 平台上优雅的包管理解 ...

  2. Darkreader插件导致B站评论区“更多评论”不显示

    解决方案: 在高级设置中把B站css中的".button:before"那里删掉即可

  3. Counting Principles计数原理•Arrangement排列•Combination组合•Binomial Theorem二项式定理

    Sampling K objects out of N : Does the K samples have order? is the object replaceable? Labeling: la ...

  4. ICEE-家电-电饭锅原理: MCU交互与程控(弱电)+强电(NTC温控+继电器+电阻发热管)

    客户需求与竞争情报.董事会决策. 市场调研.试制预研.商业计划. 组织管理.人才招聘培训. 样品与采购.研发生产与量产. 市场营销与推广.客户服务与反馈. firmware.软件.电路硬件.机械与材料 ...

  5. tauri学习(6)-系统托盘systemTray

    接上节继续,研究下系统托盘. 一.tauri.conf.json配置启用系统托盘 二.Rust中添加托盘 运行效果: 但是只有一个托盘图标,点了啥反应都没有. 三.给托盘加菜单 效果: 接下来,给托盘 ...

  6. win11正式版出现驱动程序不兼容的问题

    有不少雨林木风系统的小伙伴,在电脑上安装win11正式版以后,电脑都会自动安装驱动程序,而因为是自动安装的,常常会出现驱动程序不兼容问题,导致一些硬件出现不能正常使用的问题,那样这种情况我们要如何解决 ...

  7. 【🔥🔥🔥RDB还是AOF ?】Redis持久化原理全景解读与生产级决策手册

    Redis 的持久化机制是其高可用性的基石,主要包含 RDB (Redis Database) 和 AOF (Append Only File) 两种方式,它们的设计目标.实现原理和适用场景各有不同. ...

  8. unity资源提取工具AssetStudio

    最新版本下载地址: https://ci.appveyor.com/project/Perfare/assetstudio/branch/master/artifacts 下载地址(2020年3月20 ...

  9. mysql的存储引擎选择

    (1) InnoDB : 是Mysql的默认存储引擎,支持事务.外键.如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新.删除操作,那么I ...

  10. 宝塔面板SSL证书安装指南

    在宝塔面板上安装SSL证书是一个相对简单的过程,主要步骤包括准备SSL证书.登录宝塔面板.上传证书文件.配置SSL设置.以下是详细的步骤指南: ​ 一.准备工作 1.购买SSL证书 从正规的证书颁发机 ...