【发布时间】:2020-06-18 13:10:31
【问题描述】:
是否可以定义一个枚举而不用担心 Rust 中的内存分配?
假设以下是我的枚举的定义。
pub enum Orientation {
North,
South,
East,
West,
}
我想知道是否可以在代码中引用 Orientation::North 的同一个实例。
以下代码是否会生成两个单独的 North 实例?
let o1 = Orientation::North;
let o2 = Orientation::North;
我知道我可以通过定义如下静态变量来实现它。 有没有更好(语法上更安全/更简单/更干净)的方法来做同样的事情?
pub enum Orientation {
North,
South,
East,
West,
}
static NORTH: Orientation = Orientation::North;
static SOUTH: Orientation = Orientation::South;
static WEST: Orientation = Orientation::West;
static EAST: Orientation = Orientation::East;
【问题讨论】:
-
每个变体都将被编码为一个字节。运行时任何地方都没有存储任何内容,编译后的代码看起来就像您只是在比较数字字节一样。将
enum变量存储为静态变量将一事无成,因为引用它们将意味着传递指针 - 这是 8 个字节!