Qual é a otimização de ponteiro nulo no Rust?
NoAprendendo a ferrugem com listas vinculadas inteiramente demais, o autor menciona:
No entanto, se tivermos um tipo especial de enum:
enum Foo {
A,
B(ContainsANonNullPtr),
}
a otimização do ponteiro nulo entra em ação, o queelimina o espaço necessário para a tag. Se a variante forA
, todo o enum está definido como todos0
's. Caso contrário, a variante éB
. Isso funciona porqueB
nunca pode ser tudo0
, pois contém um ponteiro diferente de zero.
Eu acho que o autor está dizendo que (assumindoA
é de 4 bits eB
é de 4 bits)
let test = Foo::A
o layout da memória é
0000 0000
mas
let test = Foo::B
o layout da memória é
some 8 bit non 0 value
O que exatamente é otimizado aqui? As duas representações nem sempre são 8 bits O que significa quando o autor afirma
Isso significa&
, &mut
, Box
, Rc
, Arc
, Vec
, e vários outros tipos importantes de Rust não têm sobrecarga quando colocados em umOption