【发布时间】:2018-10-02 20:58:25
【问题描述】:
我真的对 Rust 的内存分配系统感到困惑。
在 Java 中,您使用 new 在堆上分配内存。在 C 中,您使用 malloc(),其他所有内容都在堆栈中。
我认为,在 Rust 中,Box<T> 在堆上分配内存,但在阅读 "Defining Our Own Smart Pointer" section in chapter 15.2 in The Rust Programming Language 之后,MyBox<T> 似乎没有任何特殊注释来使 T 的值存在于堆上。
-
堆栈上到底发生了什么,堆上发生了什么?
-
MyBox<T>的实现与Box<T>本质上是一样的吗? -
如果实现相同,是什么让
T存储在堆上而不是堆栈上? -
如果实现不同,是什么让
Box<T>在堆上分配内存?
【问题讨论】:
-
(实际上,在C语言中,这些都不是堆和栈的概念,malloc只是需要给内存,不管它是什么,malloc的一些实现使用“栈”,但C没有关心,这就是重点,C 为你抽象了这个(但是在后台 malloc 经常使用“堆”))
-
尽量不要考虑“堆栈”与“堆”,因为这两个概念确实过时并且几乎不相关,因为编译器可以并且会严重模糊这些界限。思考而不是“本地”与“可共享”或“动态”。
-
是的,我确实是这样想的,我只是想知道引擎盖下发生了什么,以及 rust 如何在没有明确调用“new”之类的东西的情况下实现这一点
-
最好发布单独的问题,而不是将您的问题合并为一个。这样,它可以帮助回答您的问题的人以及寻找您的问题的其他人。
-
@JimMorrison:关于问题 3-4:您链接到的书指出以下内容:“注意:我们即将构建的 MyBox
类型和真正的 Box ”所以:我们的版本不会将其数据存储在堆上。 MyBox和普通的Box是根本不同的!
标签: rust