假设我们有一个enum Foo { A, B, C }.
Option<Foo>在这种情况下,是否针对单个字节进行了优化?
奖金问题:如果是这样,优化过程的限制是什么?枚举可以嵌套并包含其他类型.编译器是否始终能够计算最大组合数,然后选择最小的表示形式?
在优化enums 的空间布局时,编译器并不是很聪明。鉴于:
enum Option<T> { None, Some(T) }
enum Weird<T> { Nil, NotNil { x: int, y: T } }
enum Foo { A, B, C }
编译器实际上只考虑一种情况:
类似Option枚举:一种不携带数据的变体(“nullary”),一种仅包含一个数据的变体。当与已知永远不会为 null 的指针一起使用时(当前仅引用 和Box<T>),表示形式将是单个指针的表示形式,null 表示 null 变体。作为特殊情况,Weird将接受相同的处理,但该y字段的值将用于确定该值代表哪个变体。
除此之外,还有很多很多可能的优化可用,但编译器还没有这样做。特别是,您的情况不会表示为单个字节。对于单个枚举,不考虑嵌套情况,它将表示为它可以表示的最小整数。