以下是有效的Rust:
enum Foo {
One(i32, i32, i32),
Two { x: i32, y: i32 },
}
fn main() {
let x: [Foo; 2] = [Foo::One(1, 2, 3), Foo::Two { x: 1, y: 2 }];
}
Rust如何存储?第一个元素是12个字节,而第二个元素是8(我想在开头加上一个标记字节)。它是否只存储对数组中元素的引用?
答案 0 :(得分:6)
枚举的所有变体使用相同数量的内存(在Foo
类型的情况下,至少在我的机器上有16个字节)。枚举值的大小由其最大变体(在您的示例中为One
)确定。
因此,这些值可以直接存储在数组中。
答案 1 :(得分:6)
Rust是一种系统编程语言,你可以问它!
use std::mem;
enum Foo {
One(i32, i32, i32),
Two { x: i32, y: i32 },
}
fn main() {
println!("{}", mem::size_of::<Foo>());
}
这个prints 16在操场上。
请注意,我没有说明我是否谈到One
或Two
,因为这无关紧要。 Foo
具有独特的尺寸。
根据经验,您可能希望避免存储非常大的变体。如果单个变体比另一个变体大得多,则一种解决方案是伸出Box
。