Оптимизация нулевого указателя удаляет отдельное поле тега.
чение Rust с использованием слишком большого количества связанных списковАвтор упоминает:Однако, если у нас есть особый вид перечисления:
начинается оптимизация нулевого указателя, которая
enum Foo {
A,
B(ContainsANonNullPtr),
}
устраняет пространство, необходимое для тега, Если вариант, все перечисление установлено на всеA
«S. В противном случае вариант0
, Это работает, потому чтоB
никогда не может быть всемB
с, так как он содержит ненулевой указатель.0
Я думаю, что автор говорит, что (при условии
4 бита, иA
это 4 бита)B
расположение памяти
let test = Foo::A
но
0000 0000
расположение памяти
let test = Foo::B
Что именно здесь оптимизировано? Не всегда оба представления представляют 8 битов. Что это означает, когда автор заявляет
some 8 bit non 0 value
Это значит
и некоторые другие важные типы в Rust не имеют накладных расходов при&
, &mut
, Box
, Rc
, Arc
, Vec
Я не понимаю, учебник неточный? или это устаревшее?Option