Avatar ·

Quão grandes são as sobrecargas de Option<T> em Rust comparadas a ponteiros nulos?

Olá a todos! Acabei de começar a aprender Rust, vindo de C++. Lá, eu costumava usar nullptr ou NULL para indicar ausência de valor. Em Rust, em vez disso, usa-se Option, e fico me perguntando: quão caro isso é? Afinal, em C++, um ponteiro nulo é apenas 0, e não há custos adicionais. Por exemplo, tenho uma struct assim: ```rust struct Node { value: i32, left: Option>, right: Option>, } ``` Se eu fizer `left: None`, o Rust precisa armazenar em algum lugar uma flag que indica que é None. Então, cada Option ocupa mais memória do que um ponteiro bruto? Ou o compilador otimiza isso de alguma forma? Tentei verificar o tamanho: ```rust use std::mem::size_of; fn main() { println!("{}", size_of::>>()); // 8? println!("{}", size_of::>()); // 8? } ``` Em um sistema de 64 bits, ambos mostraram 8 bytes. Mas como assim? Se Option é um enum, ele deveria armazenar um discriminante (me