繁体   English   中英

了解Rust堆栈分配

[英]Understanding Rust stack allocation

根据https://doc.rust-lang.org/stable/rust-by-example/std/box.html

Rust 中的所有值默认为堆栈分配。 可以通过创建 Box 将值装箱(在堆上分配)。 盒子是一个指向 T 类型堆分配值的智能指针。当盒子离开 scope 时,它的析构函数被调用,内部 object 被销毁,堆上的 ZCD69B4957F06CD818D7ZBF3D619d.E291 被释放

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM