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

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

最佳答案

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

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

关于memory - Rust 如何在数组中存储枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40365336/

相关文章:

c - 传递 char* 作为参数时出现段错误 - c

arrays - 在 Julia 中使用 StaticArrays.jl 进行性能分配和复制

java - 使用二元运算查明 int 是否包含枚举集中的元素

rust - 向量元组的字符串连接

macros - 是否可以编写一个计算项目并生成枚举的宏?

c++ - glDrawArray() 给出内存异常

使用位域比较 C 中的结构

c - 有没有办法在 C90 标准中使枚举无符号? (符合 MISRA-C 2004)

c++ - std::unordered_map 使用枚举和定义的类

reference - 什么场景下优先使用不借用的API?