(
"Option类型占的内存空间为:{}字节",
std::mem::size_of::>()
);
}
Vec!...类型占的内存空间为:24字节
Option类型占的内存空间为:16字节
但是对于enum类型,
会有一个tag字段,uint64,来标记变体,是None值还是Some值
struct Option...(
"Data这个Enum类型占的内存空间为:{}字节",
std::mem::size_of::()
);
}
输出为:
Data这个Enum类型占的内存空间为...:32字节
Rust的enum类似C++ std::variant的实现(大致是用union实现的)
union的内存大小是其成员中最大的那个成员的大小,
类似的,对于Data这个Enum类型,会选择最大的那个成员的大小...这个Option类型占的内存空间为:32字节
因为编译器会对嵌套的枚举类型进行优化,会将其tag展开, 把多个tag合在一起了,类似下面:
展开变成一个枚举(None是uint64,能标识非常多信息)