我搞不懂为什么Vec<;i64>;和VecEnum的大小在以下代码中相同:
pub enum VecEnum {
Abc,
Vec(Vec<i64>),
}
pub enum IntEnum {
Abc,
Int(i64),
}
pub fn main() {
println!("IntEnum: {} bytes", core::mem::size_of::<IntEnum>());
println!("i64: {} bytes", core::mem::size_of::<i64>());
println!("VecEnum: {} bytes", core::mem::size_of::<VecEnum>());
println!("Vec<i64>: {} bytes", core::mem::size_of::<Vec<i64>>());
}
这将输出以下内容:
IntEnum: 16 bytes
i64: 8 bytes
VecEnum: 24 bytes
Vec<i64>: 24 bytes
对于i64,它的行为与预期一样:使用i64变体的枚举需要额外的空间来编码枚举标记.但为什么VEC不是这样,它只由3个8字节值(PTR、LEN、容量)的堆栈内存组成?
谁能解释一下这里的内存布局是如何工作的,以及幕后发生了什么?