#box #dyn #dst #collection #avoid

no-std tinybox

类似于 Box,但通过优化避免了小型数据结构的分配

4 个版本 (2 个重大更改)

0.3.1 2023年1月4日
0.3.0 2023年1月3日
0.2.0 2022年1月7日
0.1.0 2022年1月7日

#798 in 数据结构


pulz-schedule 中使用

MIT/Apache

24KB
502

tinybox

Crates.io docs.rs license: MIT/Apache-2.0 Rust CI

TinyBox 类似于 Box,但通过优化避免了小型数据结构的分配。这是通过将值位存储在指针内部实现的,当数据结构适合指针大小时。这对于像特质这样的动态大小类型特别有用。

示例

此示例将值存储在 TinyBox 中,而不需要分配。

use tinybox::TinyBox;
let boxed = TinyBox::new(1234usize);
assert_eq!(1234, *boxed)

这看起来不太有用,因为值可以存储在一个 usize 变量中,而不需要 TinyBox。下面是一个更实用的示例,它使用了 dyn 特质。在 stable-rust 中使用 tinybox! 宏将值强制转换为 dyn 特质。

use std::any::{Any,TypeId};
use tinybox::{tinybox, TinyBox};
let boxed: TinyBox<dyn Any> = tinybox!(dyn Any => 1234usize);
assert_eq!(TypeId::of::<usize>(), (*boxed).type_id());
assert_eq!(1234, *boxed.downcast::<usize>().unwrap());

no_std

这个 crate 也应该在 std 下运行。无需额外配置。

许可证

此仓库受以下许可证之一许可:

任选其一。

除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献,均应按上述方式双重许可,而无需任何附加条款或条件。

无运行时依赖