struct - 如果我创建一个结构并将其放入向量中,它是驻留在堆上还是堆栈上?

标签 struct rust heap-memory

我正在编写一些生成几何元素向量的代码:

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/

相关文章:

c - 如何更新结构体中的字段?

enums - 按范围匹配枚举

Java、Spring、Tomcat 在 "INFO: Initializing Spring root WebApplicationContext"挂起,我想我更改了整个系统的允许内存堆

c - getaddrinfo addrinfo 结果在堆栈或堆中

matlab - 通过 Matlab 中的 'ID' 字段加入具有相同字段名的 2 个结构

c++ - 返回匿名结构

string - 如何找到另一个字符串的字符串切片的起始偏移量?

rust - 不能使用 NEON JsArray : This function takes 3 parameters but 2 were supplied

heap-memory - 如何在独立配置中通过 CLI 更改 keycloak jvm 参数

c - 在 C90 中将位字段和其他数据类型作为单个结构中的字段是不好的做法吗?