【发布时间】:2015-08-05 12:02:35
【问题描述】:
当您有Option<&T> 时,编译器知道NULL 绝不可能是&T 和encodes the None variant as NULL instead 的值。这样可以节省空间:
use std::mem;
fn main() {
assert_eq!(mem::size_of::<&u8>(), mem::size_of::<Option<&u8>>());
}
但是,如果您对非指针类型执行相同操作,则不需要额外的位来存储该值,并且需要额外的空间:
use std::mem;
fn main() {
// fails because left is 1 and right is 2
assert_eq!(mem::size_of::<u8>(), mem::size_of::<Option<u8>>());
}
一般来说,这是正确的。但是,我想选择优化,因为我知道我的类型具有某些不可能的值。作为一个虚构的例子,我可能有一个有年龄的玩家角色。年龄可能不详,但绝不会高到255:
struct Age(u8);
struct Player {
age: Option<Age>,
}
我希望能够将此约束通知优化器 - Age 永远不会是 255,因此使用该位模式作为 None 是安全的。这可能吗?
【问题讨论】:
标签: optimization rust