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



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

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

Vec(包含指针,长度和容量的结构)是始终存储在堆栈上的始终是不正确的。您可以通过将其放入BoxVec或其他使用Smart Pointer中,将其移动到堆栈到堆的任何类型(不可移动)。只需考虑像i64这样的直接类型:它可能存储在堆栈上(或在编译器这样选择的情况下,在寄存器中),但是如果您编写vec![7i64],则在堆上存储了i64,并且堆栈中唯一剩下的东西是Vec本身(指针加长度和容量)。

使用此类比,不难看到String的适用性相同: can can 在堆栈上,但是您可以通过创建Vec<String>将其放在堆上。因此,如果您的Vec<String>具有长度100,则有 101 独立的堆分配:一个由Vec拥有,而String s。

另请参见

  • 如果我制作结构并将其放在向量中,它是否位于堆或堆栈上?
  • 数组向量的内存布局是什么?

最新更新