они не ищутся в паддинге.
Взять вот две структуры
struct Foo {
a: u32,
b: NonZeroU32,
}
struct Bar {
a: u32,
}
enum FooBar {
Foo(Foo),
Bar(Bar),
}
Чему равен size_of::<FooBar>()?
12.
1 байт - дискриминат
3 байта паддинг
8 байт на значение варианта
Но почему бы не заэнкодить дискриминант в нелевую нишу из под Foo.b? Bar того же размера, что и поле Foo.a, а остальное неиспользуется, а значит может быть 0
паддинг не нища
PR на тему весит, пока не смержили.
Спасибо. Будем следить. А то руками через union это делать слегка неудобно
Обсуждают сегодня