#pointers #16-bit #arc #box #respectively #flags #mut

tinypointers

占用 8 或 16 位的指针实现

1 个不稳定版本

0.2.2 2023 年 12 月 5 日
0.2.1 2023 年 12 月 4 日
0.2.0 2023 年 12 月 3 日
0.1.0 2023 年 12 月 3 日

#1254Rust 模式

每月 25 次下载

MIT 许可证

21KB
474

小指针

这个 crate 实现了比 std 相当的指针类型占用更少的空间。您可以通过使用标志 1byteid2byteid 分别选择 8 或 16 位。

TinyBoxTinyArcTinyPtr 分别等同于 BoxArc*mut T

已经尽量确保从 rust 类型到等效的 tinypointers 类型的转换尽可能不痛苦。如果您需要的功能缺失,请随时提交 PR!

如何

为此,内存将在堆上分配并插入到全局数组中。您将获得数组内的一个索引,这就是所谓的 id

尺寸优化

由于这个 crate 力求最小化内存占用,内部使用 NonZero* 以启用内存布局优化。这意味着以下示例中的两个结构体具有相同的大小

use tinypointers::TinyBox;

struct Bar(TinyBox<i32>);

struct Foo(Option<TinyBox<i32>>);

// 2 == 2
assert_eq!(std::mem::size_of::<Bar>(), std::mem::size_of::<Foo>())

依赖项

~0.4–6MB
~11K SLoC