Enums 我可以限制锈蚀枚举的大小吗?
我的Rust程序中有一个枚举类型,其中一些变量可能包含内部数据Enums 我可以限制锈蚀枚举的大小吗?,enums,rust,discriminated-union,Enums,Rust,Discriminated Union,我的Rust程序中有一个枚举类型,其中一些变量可能包含内部数据 enum MyEnum { A, B(u64), C(SmallStruct), D(Box<LargeStruct>) } enum MyEnum{ A. B(u64), C(SmallStruct), D(方框) } 这个枚举将被存储数万次,内存使用是一个问题。我希望避免意外地为enum添加一个非常大的变量。有什么方法可以告诉编译器限制内存中枚举实例的大小吗?您可以使用并断言您的枚
enum MyEnum {
A,
B(u64),
C(SmallStruct),
D(Box<LargeStruct>)
}
enum MyEnum{
A.
B(u64),
C(SmallStruct),
D(方框)
}
这个枚举将被存储数万次,内存使用是一个问题。我希望避免意外地为enum添加一个非常大的变量。有什么方法可以告诉编译器限制内存中枚举实例的大小吗?您可以使用并断言您的枚举小于或等于某个大小。如另一个答案中所述,您可以使用
常量断言代码>宏,但它需要一个外部板条箱。如果您正在寻找仅适用于std的解决方案,并且在断言失败时可以接受更难看的错误消息,那么可以使用以下()命令:
#[deny(const_err)]
常量fn常量断言(ok:bool){
0-!使用时正常;
}
//断言MyEnum不大于16字节
const\u ASSERT\u SMALL:()=const\u ASSERT(mem::size\u of:())运行clippy,它会告诉您。另请参阅。
#[deny(const_err)]
const fn const_assert(ok: bool) {
0 - !ok as usize;
}
// assert that MyEnum is no larger than 16 bytes
const _ASSERT_SMALL: () = const_assert(mem::size_of::<MyEnum>() <= 16);