Option<bool>为例,我得到Option<bool>bool的大小都是1字节,但我仍然不是Option<bool>%地了解它的变体的内存分配是如何发生的.

它的工作原理如下吗?

Some(true)%至00000001%

Some(false)%至00000000%

除了0000000100000000(例如:00000010)以外的None个左右(根据下面的 comments ,从"任何"改为"任何")

推荐答案

此代码将打印Option<bool>的所有3个可能值的字节值:

fn main() {
    let a:[Option<bool>;3]=[Some(true), Some(false), None];
    
    for i in a {
        // Re-Interpret the bytes of the option as a number
        let j:u8 = unsafe { std::mem::transmute(i) };
        println!("{i:?} {j:?}");
    }
}

输出:

Some(true) 1
Some(false) 0
None 2

似乎None被表示为2.

Playground Link

注意:这不是官方指定的,因此它可能会在future 的版本中更改.不要依赖这种行为.

Rust相关问答推荐

如果成员都实现特征,是否在多态集合上实现部分重叠的特征?

为什么基于高山Linux的Docker镜像不能在绝对路径下找到要执行的命令?

从未排序的链表中删除重复项的铁 rust 代码在ELSE分支的低级上做了什么?

AXUM一路由多个不包括URL的参数类型

我无法理解Rust范围的定义(Rust Programming Language,第二版克拉布尼克和尼科尔斯)

如何防止Cargo 单据和Cargo 出口发布( crate )项目

无法实现整型类型的泛型FN

如何使用Actix Web for Rust高效地为大文件服务

无法将 rust 蚀向量附加到另一个向量

如何初始化选项<;T>;数组Rust 了?

如何实现Deref;多次;?

为什么HashMap::get和HashMap::entry使用不同类型的密钥?

当我try 使用 SKI 演算中的S I I实现递归时,为什么 Rust 会失败?

为什么某些类型参数仅在特征边界中使用的代码在没有 PhantomData 的情况下进行编译?

存储返回 impl Trait 作为特征对象的函数

在发布中包含 Rust DLL

有什么办法可以追踪泛型的单态化过程吗?

Rust HRTB 是相同的,但编译器说一种类型比另一种更通用

相交着色器从 SSBO 中读取零

TinyVec 如何与 Vec 大小相同?