我知道 vector 的一部分(实际数据)存储在堆中,而一些数据(包含长度、容量和指向堆中实际数据的指针的结构)存储在堆栈中。
向量的向量(即向量的元素是其他向量,例如字符串向量)呢?这个外部容器向量的哪些部分存储在堆和栈上?各个内部元素呢?
最佳答案
Vec
是不正确的(包含指针、长度和容量的结构)总是存储在堆栈中。您可以将任何类型(不包括不能移动的自引用类型)从堆栈移动到堆,方法是将它放在 Box
中。 , Vec
或其他使用堆的智能指针。只需考虑一个简单的类型,如 i64
: 它可能存储在堆栈中(或者如果编译器选择存储在寄存器中),但是如果你写 vec![7i64]
, 你有一个 i64
存储在堆上,堆栈上唯一剩下的就是 Vec
本身(指针加上长度和容量)。
通过这个类比,不难看出 String
也是如此。 : 它可以在堆栈上,但您可以通过创建 Vec<String>
将它放在堆上.因此,如果你有一个 Vec<String>
长度为 100,有 101 个独立的堆分配:一个由 Vec
拥有String
各拥有一个
另见
关于vector - 向量的向量的内存布局是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54956898/