Rust多引用类型的内存表示及字面量引用存储位置问询
多层引用与字面量引用的内存实现原理
一、多层引用(如&&someString)的内存结构
多层引用本质就是指针的指针,每一层引用都是存储在栈上的指针,指向它的上一层引用的地址:
拿具体例子来说:
let some_string = String::from("hello"); // 自有String类型,堆上存实际字节数据,栈上存元数据(指针、长度、容量) let y = &&some_string;
它的内存布局是:
- 栈上的
y:存储的是一级引用&some_string的内存地址 - 栈上的
&some_string:本身是一个指针,存储的是some_string在栈上的元数据地址(String的栈元数据又指向堆上的实际字节数据) - 堆上:存放
hello的字节数据,以及String的长度、容量信息
简单来说就是:y → 一级引用的栈地址 → String的栈元数据 → 堆上的字符串数据
二、let x = &5;的内存位置
这里的字面量5属于编译期常量,编译器会把它放到程序的只读数据段(比如Linux下的.rodata段)中,栈上的x就是一个指针,存储的是这个只读数据段里5的内存地址。
这类常量是只读的,程序运行时无法修改,因为它们被放在只读内存区域。
内容的提问来源于stack exchange,提问作者Moyen Medium
相关产品推荐
相关产品推荐

