Rust如何在数组中存储枚举值?

时间:2016-11-01 17:26:51

标签: memory enums rust

以下是有效的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(我想在开头加上一个标记字节)。它是否只存储对数组中元素的引用?

2 个答案:

答案 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在操场上。

请注意,我没有说明我是否谈到OneTwo,因为这无关紧要。 Foo具有独特的尺寸。

根据经验,您可能希望避免存储非常大的变体。如果单个变体比另一个变体大得多,则一种解决方案是伸出Box