【发布时间】:2018-03-15 10:03:29
【问题描述】:
在Learning Rust With Entirely Too Many Linked Lists,作者提到:
但是,如果我们有一种特殊的枚举:
enum Foo { A, B(ContainsANonNullPtr), }空指针优化开始,消除了标记所需的空间。如果变体是
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时没有开销
【问题讨论】:
标签: rust