使用 Rust 将 option<i32> 和 vec<i32> 存储在内存中

问题描述 投票:0回答:1

在程序中,定义了以下数据结构:

struct Bucket {
    data: Vec<i32>,
    threshold: Option<i32>,
}

使用调试器,已确定对于

Bucket
的实例,它存储在地址0x00006000014ed2c0处。观察该地址处的内存,显示以下内容(以32位块为单位):

308a6e01 00600000 03000000 00000000 03000000 00000000 01000000 0a000000

可以从单个实例的各个字段中包含的值推断出什么?

我发现前24个字节是指向第一个i32元素的指针,容量和len,我不明白其余的块

rust memory memory-management
1个回答
0
投票

Rust 很少保证事物在内存中的布局方式,但在这里我们可以很有把握地进行推测。

前 24 个字节确实是指向

i32
数组的开头、长度和容量的指针。

剩下的 8 个字节是

Option<i32>
。该类型有 2^32 + 1 个不同的值(2^32 个某些值和 1 个无值),它至少需要 33 位。 因为 i32 可能必须与系统上的 4 字节边界对齐,所以 Rust 使用 4 字节来存储
Option
Some
None

© www.soinside.com 2019 - 2024. All rights reserved.