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 中使用
24KB
502 行
tinybox
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
下运行。无需额外配置。
许可证
此仓库受以下许可证之一许可:
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache 许可证第 2.0 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
任选其一。
除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献,均应按上述方式双重许可,而无需任何附加条款或条件。