向量向量的内存布局是什么?

问题描述 投票:0回答:1

我知道向量的某些部分(实际数据)存储在堆中,而一些数据(包含长度,容量和指向堆中实际数据的指针的结构)存储在堆栈中。

矢量矢量怎么样(矢量的元素是其他矢量,例如字符串矢量)?这个外部容器向量的哪些部分存储在堆中和堆栈中?个别内在元素呢?

vector rust
1个回答
4
投票

Vec(包含指针,长度和容量的结构)始终存储在堆栈中并不是真的。您可以将任何类型(不包括自引用的,不可移动的)从堆栈移动到堆中,方法是将其放在BoxVec或其他堆使用智能指针中。只考虑像i64这样简单的类型:它可能存储在堆栈中(或者如果编译器选择的那样存储在寄存器中),但是如果你编写vec![7i64],你就会在堆上存储一个i64,堆栈上剩下的唯一东西就是Vec本身(一个指针加上长度和容量)。

通过这个类比,不难看出同样适用于String:它可以在堆栈上,但你可以通过创建一个Vec<String>将它放在堆上。因此,如果你有一个长度为100的Vec<String>,那么有101个独立的堆分配:一个由Vec拥有,一个由Strings拥有。

也可以看看

© www.soinside.com 2019 - 2024. All rights reserved.