You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含Vec<i32>与Option<i32>的结构体内存存储及字段值推断问题

Rust Bucket结构体实例内存解析

给定Rust结构体定义:

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

某Bucket实例存储于地址0x00006000014ed2c0,内存以32位块(每块4字节)展示如下:

308a6e01 00600000 03000000 00000000 03000000 00000000 01000000 0a000000

以下是各字段的解析(基于x86_64小端字节序):

1. data: Vec字段解析

x86_64平台下,Vec<T>由三个64位(8字节)字段组成,对应前24字节(6个32位块):

  • 元素指针:由前两个32位块拼接而成。小端序下低地址存低字节,完整指针为0x00600000016e8a30,指向堆上存储i32元素的起始地址。
  • 容量(capacity):由第3、4个32位块组成,值为0x0000000000000003,即十进制3,表示该Vec最多可容纳3个i32元素。
  • 长度(length):由第5、6个32位块组成,值为0x0000000000000003,即十进制3,表示当前Vec已存储3个i32元素。

2. threshold: Option字段解析

剩余8字节(第7、8个32位块)对应Option<i32>。Rust对Option<T>做了空指针优化:当T是Copy类型且大小不超过指针时,用高4字节标记变体(非0表示Some,全0表示None),低4字节存储值。

  • 第8个32位块是0a000000,小端序下对应i32值0x0000000a,即十进制10。
  • 第7个32位块是01000000,为非0值,说明是Some变体。
  • 因此threshold的值为Some(10)。

内容的提问来源于stack exchange,提问作者Mario Umberto Benea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:13:28