在Rust Playground上, an 的大小Option<bool>是 1。 Rust 是否将选项信息打包到 bool 本身中?所以 Option 代表 3 种可能的状态:None, Some(false), Some(true)?
use std::mem::size_of;
fn main() {
println!("{}", size_of::<Option<bool>>()); // 1
}
Run Code Online (Sandbox Code Playgroud)
是的。这称为利基优化。bool有7 位(7 个未使用的位)的利基,我们将Option::None其装入其中。
您可以检查字节(playground):
fn main() {
fn print_bytes(v: Option<bool>) {
println!("{:08b}", unsafe { std::mem::transmute::<Option<bool>, u8>(v) });
}
print_bytes(Some(false));
print_bytes(Some(true));
print_bytes(None);
}
Run Code Online (Sandbox Code Playgroud)
00000000
00000001
00000010
Run Code Online (Sandbox Code Playgroud)
你可以看到我们用第二位来表示None。
请注意,正如 @Cerberus 的评论中所述,#[repr(rust)]类型的内存布局不得到保证,因此不应依赖它。
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |