はい、Option<ptr>
(ほとんどの場合)単一のポインターに最適化するコンパイラーの魔法がいくつかあります。
use std::mem::size_of;
macro_rules! show_size {
(header) => (
println!("{:<22} {:>4} {}", "Type", "T", "Option<T>");
);
($t:ty) => (
println!("{:<22} {:4} {:4}", stringify!($t), size_of::<$t>(), size_of::<Option<$t>>())
)
}
fn main() {
show_size!(header);
show_size!(i32);
show_size!(&i32);
show_size!(Box<i32>);
show_size!(&[i32]);
show_size!(Vec<i32>);
show_size!(Result<(), Box<i32>>);
}
次のサイズが出力されます(64ビットマシンでは、ポインターは8バイトです)。
// As of Rust 1.22.1
Type T Option<T>
i32 4 8
&i32 8 8
Box<i32> 8 8
&[i32] 16 16
Vec<i32> 24 24
Result<(), Box<i32>> 8 16
なお&i32
、Box
、&[i32]
、Vec<i32>
すべての使用内部の非NULL可能ポインタの最適化Option
!
Option
-like」列挙型で行われるため、ユーザー定義のに対しても機能しますOption
。