为何Rust中Option<bool>的内存大小为1?状态是否打包进bool?
Option 的内存优化细节
对,Rust确实通过**空值优化(Null Pointer Optimization, NPO)**将Option的状态信息打包进了bool类型的存储空间中,让Option<bool>仅用1字节就能表示None、Some(false)、Some(true)三种状态。
具体来说,bool类型在Rust中虽然只需要1位就能区分false和true,但它实际占用1字节(8位)的内存——剩下的7位属于未使用的冗余空间。编译器会直接利用这些冗余位来标记None状态:
- 用字节值
0表示Some(false) - 用字节值
1表示Some(true) - 用任意非0/1的字节值(比如
2)表示None
这种优化完全不需要额外的内存来存储Option的标签位,所以Option<bool>的内存大小和bool本身一致,都是1字节。
示例代码验证:
use std::mem::size_of; fn main() { println!("{}", size_of::<Option<bool>>()); // 输出:1 }
内容的提问来源于stack exchange,提问作者drcole
相关产品推荐
相关产品推荐

