< 返回版块

duzhaosongyue 发表于 2021-12-10 17:51

Tags:枚举结构体

fn main() {
    println!("E:{}", std::mem::size_of::<E>());
}

enum E {
    H(u32),
}

这段代码的运行结果是E:4。我为枚举结构体E再添加一个值E1,代码如下:

enum E {
    H(u32),
    E1(u32),
}

这次的运行结果是E:8。然后我再为枚举结构体E再多的值,代码如下:

enum E {
    H(u32),
    E1(u32),
    E2(u32),
    E3(u32),
    E4(u32),
    E5(u32),
    E6(u32),
    E7(u32),
    E8(u32),
    E9(u32),
    E10(u32),
    E11(u32),
    E12(u32),
    E13(u32),
    E14(u32),
    E15(u32),
    E16(u32),
    E17(u32),
    E18(u32),
    E19(u32),
    E20(u32),
    E21(u32),
    E22(u32),
    E23(u32),
    E24(u32),
    E25(u32),
    E26(u32),
    E27(u32),
    E28(u32),
    E29(u32),
    E30(u32),
    E31(u32),
    E32(u32),
    E33(u32),
    E34(u32),
    E35(u32),
    E36(u32),
    E37(u32),
    E38(u32),
    E39(u32),
    E40(u32),
    E41(u32),
    E42(u32),
    E43(u32),
    E44(u32),
    E45(u32),
    E46(u32),
    E47(u32),
    E48(u32),
}

这次的运行结果依然是E:8。u32占4个字节,H标签占1个字节,那么第一次运行的结果应该是E:8,为什么是E:4?

评论区

写评论
作者 duzhaosongyue 2021-12-11 08:29

豁然开朗

--
👇
fefit: 枚举需要保存的数据包括枚举元素包含的值、枚举值当前是哪个元素的信息数据,只有一个元素的时候,只有一种可能,直接保存这个枚举元素的值就可以了,应该是RUST编译器做的优化吧

fefit 2021-12-10 18:14

枚举需要保存的数据包括枚举元素包含的值、枚举值当前是哪个元素的信息数据,只有一个元素的时候,只有一种可能,直接保存这个枚举元素的值就可以了,应该是RUST编译器做的优化吧

1 共 2 条评论, 1 页