Rust 理解堆栈分配

Rust 理解堆栈分配,rust,Rust,根据, 默认情况下,Rust中的所有值都是堆栈分配的。值可以装箱 (在堆上分配)通过创建一个框。盒子是一个智能指针 类型为T的堆分配值。当一个框超出范围时,其 调用析构函数,内部对象被销毁,内存被打开 堆被释放 因此,如果我有一个std::vec::vec并且我添加了很多结构,这是否意味着这些结构是堆栈分配的?这怎么可能呢?我只能收集一些东西,如果它们在堆上的话。据我所知,堆栈上的东西是在编译时生成的。一个盒子是在堆上分配的一种方式,但它不是唯一的方式。其他数据结构(包括Vec)将其数据存储在堆

根据,

默认情况下,Rust中的所有值都是堆栈分配的。值可以装箱 (在堆上分配)通过创建一个框。盒子是一个智能指针 类型为T的堆分配值。当一个框超出范围时,其 调用析构函数,内部对象被销毁,内存被打开 堆被释放


因此,如果我有一个std::vec::vec并且我添加了很多结构,这是否意味着这些结构是堆栈分配的?这怎么可能呢?我只能收集一些东西,如果它们在堆上的话。据我所知,堆栈上的东西是在编译时生成的。

一个盒子是在堆上分配的一种方式,但它不是唯一的方式。其他数据结构(包括Vec)将其数据存储在堆上。因此,在本例中,当您创建
MyStruct
的每个实例时,它最初将位于堆栈上,但一旦您将其推送到Vec上,它就会移动到堆中。至少在概念上是这样的;根据具体情况和编译器优化设置,Rust可能能够避免物理写入堆栈,而不是直接写入堆。

如果您使用的是依赖于其内部结构的结构<例如,code>Vec将其内部数据存储在堆上。