在Learning Rust With Entirely Too Many Linked Lists篇文章中,作者提到:
但是,如果我们有一种特殊的枚举:
enum Foo { A, B(ContainsANonNullPtr), }
空指针优化开始了,这是eliminates the space needed for the tag.如果变量为
A
,则整个枚举设置为所有0
.否则,变量为B
.这是因为B
永远不可能都是0
,因为它包含一个非零指针.
我猜作者是这么说的(假设A
是4位,B
是4位)
let test = Foo::A
内存布局是
0000 0000
但是
let test = Foo::B
内存布局是
some 8 bit non 0 value
这里到底优化了什么?这两种表示法不是都是8位吗?当作者声称
这意味着
&
、&mut
、Box
、Rc
、Arc
、Vec
和其他几种重要类型的 rust 迹在放入Option
时没有开销