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

标签 vector rust

我知道 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/

相关文章:

c++ - C++ 中的内存泄漏 : vector functions in loops

vector - 确定 2D 矢量的总体方向

c++ - 在字符串 vector 上使用 push_back - C++

c++ - if 语句中的 vector<int>::iterator 编译失败

c++ - Push_back 映射到 vector 中

generics - 错误 : unable to infer enough type information about `_` ; type annotations or generic parameter binding required

string - 拆分字符串并返回片段

rust - 使用 .unwrap() 应该被视为不好的做法吗?

rust - Rust SDL : how do I “attach” a surface to a window?

rust - 在 Rust 中创建一个 HashMap<i32, i32>