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

解引用装箱内存分配:解引用Box时栈上是否分配i32的4字节空间?

Rust中解引用Box时的栈空间分配问题

先看你给出的代码示例:

let a = Box::new(1);
let b = *a;

针对你的问题,直接明确回答:是的,执行let b = *a;时会在栈上分配4字节的i32类型空间。

具体细节拆解:

  • Box::new(1):会在堆上分配4字节存储i32值1,同时在栈上为变量a(Box本质是一个指向堆内存的指针)分配空间——64位系统下指针占8字节,32位系统下占4字节。
  • let b = *a;:这一步是将Box指向的堆内存中的i32值拷贝到栈上的变量b中,所以栈上会为b分配4字节的i32空间,存储拷贝过来的1。

如果是通过引用方式使用解引用结果(比如let b = &*a;),那b只是一个指向堆内存的引用,不会在栈上分配i32的空间,但你的代码是直接赋值给b,所以属于值拷贝,会分配对应的栈空间。

内容的提问来源于stack exchange,提问作者pandawithcat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:28:09