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

时间:2019-03-02 09:06:37

标签: vector rust

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

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

1 个答案:

答案 0 :(得分:4)

并非总是将Vec(包含指针,长度和容量的结构)存储在堆栈中。您可以通过将其放入BoxVec或其他使用堆的智能指针中,将任何类型(不包括自引用类型,不能移动)从堆栈移动到堆。只需考虑一个简单的类型,例如i64:它可能存储在堆栈中(如果编译器选择,则存储在寄存器中),但是如果您编写vec![7i64],则存储了i64堆上剩下的唯一东西是Vec本身(指针加上长度和容量)。

以此类推,不难发现String同样适用:它可以放在堆栈中,但是您可以通过创建{{ 1}}。因此,如果您的Vec<String>的长度为100,则有 101 个独立的堆分配:Vec<String>拥有一个堆分配,Vec每个拥有一个堆分配

另请参见