2 个稳定版本
1.0.1 | 2024 年 3 月 21 日 |
---|---|
1.0.0 | 2023 年 9 月 15 日 |
#142 在 内存管理
每月 392 次下载
28KB
353 行
许可证
根据以下任一许可证授权:
- Apache 许可证 2.0 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则您有意提交的任何贡献均应按上述方式双授权,没有任何附加条款或条件。
lib.rs
:
这个分配器就是直截了当的 slabbin。
从理论上讲,如果适用,slab 分配器是完美的。它非常快,避免了外部碎片化的问题;但与 bump 分配器不同,它可以释放单个分配,与栈分配器不同,它可以任意顺序释放它们。这里的权衡是所有分配都必须具有相同、固定的布局。
此 crate 中的分配器完全不安全,专门用于需要稳定地址的场景:当你分配一个槽位时,你得到一个指针,直到你释放它(或销毁分配器)之前都有效。例如,使用场景包括链式结构或自引用结构。如果您没有这个需求,您可以考虑使用 slab
或 typed-arena
等作为安全的替代方案。
Slabs
页板(slab)是指预分配的连续内存块,其中包含槽位(slots)。每个槽位可以是空闲的或者被占用的。页板一开始所有的槽位都是空闲的,每次分配时都会分配新的槽位,直到槽位用完,此时会分配新的页板。被释放的槽位会以链表的形式连接起来。因此,在最佳情况下,分配操作需要3个步骤,在最坏情况下需要大约8个步骤。释放操作始终需要3个步骤。