Why is this Rust enum not smaller?
Consider this silly enum: enum Number { Rational { numerator: i32, denominator: std::num::NonZeroU32, }, FixedPoint { whole: i16, fractional: u16, }, } The data in the Rational variant takes up 8 bytes, and the data in the FixedPoint variant takes up 4 bytes. The Rational variant has a field which must be nonzero, so i would hope that the enum layout rules would use that as a discriminator, with zero indicating the presence of the FixedPoint variant. However, this: fn main() { println!("Number = {}", std::mem::size_of::<Number>(),); } Prints: Number = 12 So, the enum gets space for an explicit