9个版本
0.2.0 | 2022年3月13日 |
---|---|
0.1.7 | 2022年3月12日 |
0.1.6 | 2020年6月3日 |
0.1.4 | 2019年9月1日 |
0.1.1 | 2019年8月31日 |
#10 in #boxed
685 每月下载量
在 6 个crate中使用 (via default-boxed)
5KB
87 行
default-boxed
用于直接在堆上创建具有默认值的大型结构体实例的辅助特质,而不通过栈进行。
类似于不稳定语法 box
,它从语义上不需要在栈上创建整个结构体然后移动到堆上,因此与 copyless
或 boxext
不同,它不依赖于优化来消除在栈上构建结构体,这可能在创建大型结构体时仍面临栈溢出的调试构建。
示例
use default_boxed::DefaultBoxed;
const BASE: usize = 1024;
#[derive(DefaultBoxed)]
struct Foo {
a: Bar,
b: [Bar; 1024 * BASE],
c: [u32; 1024 * BASE],
}
struct Bar(u16);
impl Default for Bar {
fn default() -> Bar {
Bar(29)
}
}
let foo = Foo::default_boxed();
assert_eq!(foo.a.0, 29);
assert_eq!(foo.b[128 * BASE].0, 29);
assert_eq!(foo.c[256 * BASE], 0);
let foo_arr = Foo::default_boxed_array::<16>();
assert_eq!(foo_arr[15].a.0, 29);
依赖项
~1.5MB
~35K SLoC