输出:
OptData这个Option类型占的内存空间为:32字节
因为编译器会对嵌套的枚举类型进行优化,会将其tag展开, 把多个tag合在一起了,类似下面:
展开变成一个枚举(None是uint64,能标识非常多信息)
type OptData = Option<Data>;enum Option { Some, None,}enum OptData_ { I32(i32); F64(f64); Bytes(SimpleVec<u8>), None}
元组tuple rust中的元组大小固定吗?
在Rust中,元组的大小是固定的 。这里解释一下元组大小固定的含义:
- 元组中的元素类型和数量在编译期就已经确定,不能在运行期修改 。
- 编译器会根据元组中元素的类型,预先分配足够的内存用于存储这些元素 。
- 元组的内存布局和大小也在编译期就确定下来了,运行期不会改变 。
- 尝试创建包含不同类型或数量元素的元组,是编译时错误 。
let tuple = (1, 2.0, "three");
这里元组包含一个i32,一个f64和一个字符串 。编译器会预先知道:- 元组元素类型为i32, f64, &str
- i32占用4字节,f64占用8字节,&str占据一个指针的空间
- 所以该元组占用的内存大小为4 + 8 + 8 = 20字节
如果后续试图给这个元组添加或减少元素,编译都会报错 。
所以说,元组的大小和内容是固定的,这是Rust实现方式的一部分 。
更多可参考Rust 数据内存布局[2]
参考资料[1]Rust内存布局:
推荐阅读
- ARM架构下部署StarRocks3,你学会了吗?
- 深入Rust的模式匹配与枚举类型
- 王者荣耀:单排玩家上分学会这几要点,告别痛苦!
- Javascript的闭包有哪些应用?你学会了吗?
- Springboot扩展点之BeanDefinitionRegistryPostProcessor,你学会了吗?
- 程序员学会与大模型相处,提升个人开发效率
- 今天才发现,钞票上有个小玄机,看一眼能辨真伪,学会再也不吃亏
- 30+一定要学会做减法,我选择低物欲生活
- 如何用秀米快速写出一篇推文,在秀米编辑器怎么复制推文的链接
- 笔记本电脑如何打字,电脑新手如何快速学会打字