Avatar ·

Rust中Option<T>相比空指针的开销有多大?

大家好!我刚开始学习Rust,从C++转过来。在C++中,我习惯用nullptr或NULL表示值的缺失。而在Rust中,使用Option,我一直在纠结:这到底有多昂贵?毕竟在C++中,空指针就是0,没有任何额外开销。 例如,我有这样一个结构体: ```rust struct Node { value: i32, left: Option>, right: Option>, } ``` 如果我将`left`设为`None`,Rust必须在某处存储一个标志,表明这是None。那么每个Option占用的内存是否比裸指针更多?还是编译器会对此进行优化? 我尝试检查了大小: ```rust use std::mem::size_of; fn main() { println!("{}", size_of::>>()); // 8? println!("{}", size_of::>()); // 8? } ``` 在64位系统上,两者都显示为8字节。但这是怎么回事?如果Option是一个枚举,它应该存储一个判别式(me