解引用装箱内存分配:解引用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
相关产品推荐
相关产品推荐

