【问题标题】:How does Rust store enum values in arrays?Rust 如何将枚举值存储在数组中?
【发布时间】:2017-03-14 21:40:21
【问题描述】:

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

【问题讨论】:

  • 与其他任何地方存储枚举值的方式相同,FWIW。

标签: memory enums rust


【解决方案1】:

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。

【讨论】:

    【解决方案2】:

    枚举的所有变体都使用相同数量的内存(在您的 Foo 类型的情况下,16 字节,至少在我的机器上)。枚举值的大小由其最大变体决定(在您的示例中为One)。

    因此,值可以直接存储在数组中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-12
      • 2019-10-02
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      相关资源
      最近更新 更多