¿Cuál es la optimización del puntero nulo en Rust?
EnAprendizaje de oxidación con demasiadas listas enlazadas, el autor menciona:
Sin embargo, si tenemos un tipo especial de enumeración:
enum Foo {
A,
B(ContainsANonNullPtr),
}
entra en juego la optimización de puntero nulo, queelimina el espacio necesario para la etiqueta. Si la variante esA
, toda la enumeración se establece en todos0
's. De lo contrario, la variante esB
. Esto funciona porqueB
nunca puede ser todo0
's, ya que contiene un puntero distinto de cero.
Supongo que el autor dice eso (suponiendoA
es de 4 bits yB
es de 4 bits)
let test = Foo::A
el diseño de la memoria es
0000 0000
pero
let test = Foo::B
el diseño de la memoria es
some 8 bit non 0 value
¿Qué se optimiza exactamente aquí? ¿No son ambas representaciones siempre 8 bits? ¿Qué significa cuando el autor afirma
Significa&
, &mut
, Box
, Rc
, Arc
, Vec
, y varios otros tipos importantes en Rust no tienen gastos generales cuando se colocan en unOption