包含Vector字段的结构体是在堆还是栈上分配?
关于Train结构体的内存分配问题
Train结构体本身会分配在栈上,但其passenger_ids字段(Vector类型)存储的乘客ID数据会分配在堆上。
具体来说,Rust中的Vector本质是一个轻量级的栈上结构体,它包含三个核心成员:
- 指向堆内存数据区域的指针
- 当前存储的元素长度
- 已分配的内存容量
当你创建Train实例时,整个Train结构体(包括其中的Vector成员)会被放在栈上,但Vector指针所指向的、实际存储乘客ID的数组数据,是分配在堆内存中的。
举个直观的例子:
let train = Train { passenger_ids: vec![1001, 1002, 1003] };
这里的train变量本身位于栈上,而train.passenger_ids里的指针会指向堆上一块存储着[1001, 1002, 1003]的内存区域。
内容的提问来源于stack exchange,提问作者kemicofa
相关产品推荐
相关产品推荐

