Avatar ·

Wie groß ist der Overhead von Option<T> in Rust im Vergleich zu Nullzeigern?

Hallo zusammen! Ich habe gerade angefangen, Rust zu lernen und komme von C++. Dort habe ich nullptr oder NULL verwendet, um das Fehlen eines Werts anzuzeigen. In Rust wird stattdessen Option verwendet, und mich quält die Frage: Wie teuer ist das? In C++ ist ein Nullzeiger einfach 0, und es gibt keine zusätzlichen Kosten. Zum Beispiel habe ich so eine Struktur: ```rust struct Node { value: i32, left: Option>, right: Option>, } ``` Wenn ich `left: None` setze, muss Rust irgendwo ein Flag speichern, das sagt, dass es None ist. Bedeutet das, dass jeder Option mehr Speicher belegt als ein roher Zeiger? Oder optimiert der Compiler das? Ich habe versucht, die Größe zu überprüfen: ```rust use std::mem::size_of; fn main() { println!("{}", size_of::>>()); // 8? println!("{}", size_of::>()); // 8? } ``` Auf einem 64-Bit-System haben beide 8 Bytes angezeigt. Aber wie kann das sein? Wenn Option ein enum ist, muss es einen Diskriminanten speichern (me