在程序中,定义了以下数据结构:
struct Bucket {
data: Vec<i32>,
threshold: Option<i32>,
}
使用调试器,已确定对于
Bucket
的实例,它存储在地址0x00006000014ed2c0处。观察该地址处的内存,显示以下内容(以32位块为单位):
308a6e01 00600000 03000000 00000000 03000000 00000000 01000000 0a000000
可以从单个实例的各个字段中包含的值推断出什么?
我发现前24个字节是指向第一个i32元素的指针,容量和len,我不明白其余的块
Rust 很少保证事物在内存中的布局方式,但在这里我们可以很有把握地进行推测。
前 24 个字节确实是指向
i32
数组的开头、长度和容量的指针。
剩下的 8 个字节是
Option<i32>
。该类型有 2^32 + 1 个不同的值(2^32 个某些值和 1 个无值),它至少需要 33 位。
因为 i32 可能必须与系统上的 4 字节边界对齐,所以 Rust 使用 4 字节来存储 Option
是 Some
或 None