我正在编写一些生成几何元素向量的代码:
struct Geom_Entity {
// a bunch of geometric information,
// like tangent planes, force vectors, etc
}
代码正在从一个文本文件中解析许多这样的实体(例如),所以我们目前有一个函数:
parse_Geom(x: String) -> Vec<Geom_Entity> {
// a bunch of code
}
这些几何实体是具有 17 个 f64
和一些其他字段的大型结构。该文件可能包含其中的 1000 多个,但不会多到无法全部放入内存(至少目前如此)。
另外,我应该做什么
Box::new(Geom_Entity { ...
然后将盒子放入向量中?
最佳答案
documentation for Vec
说(强调我的):
If a
Vec
has allocated memory, then the memory it points to is on the heap
所以是的,vector 的成员由 vector 拥有并存储在堆上。
在 general 中,在将元素放入 Vec
之前将其装箱是一种浪费 - 存在额外的内存分配和间接寻址。有时您需要额外的分配或间接寻址,所以永远不要说永远。
另见:
关于struct - 如果我创建一个结构并将其放入向量中,它是驻留在堆上还是堆栈上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43641728/