【发布时间】:2016-03-20 17:31:08
【问题描述】:
我是 Rust 新手,我试图了解何时应该使用 Box 而不是常规引用。
我能找到的所有示例都显示了如何使用 Box,但没有一个说明在什么情况下您应该在常规 & 引用上使用它们。
【问题讨论】:
我是 Rust 新手,我试图了解何时应该使用 Box 而不是常规引用。
我能找到的所有示例都显示了如何使用 Box,但没有一个说明在什么情况下您应该在常规 & 引用上使用它们。
【问题讨论】:
Box 表示一个类型是拥有的,并且它被分配在堆上。引用 (&) 表示您正在借用其他东西的价值。
您甚至可以从Box 获得引用(此处不需要显式类型,仅显示为清楚起见):
let boxed: Box<i32> = Box::new(42);
let reference: &i32 = &boxed;
主要区别归结为所有权。当你拥有一个值时,你可以对它做更多的事情,比如销毁它或控制它的可变性。
堆与堆栈也很重要,但不那么重要。堆栈往往具有相对较小的固定大小(在我的机器上是 8MiB),因此在堆栈上声明大变量可能会导致内存耗尽。堆往往更大,概念上寻址 2^32 或 2^48 字节。
The Rust Programming Language 有一个section on ownership 以及一个关于the stack and the heap 的部分;我鼓励你阅读这两本书。
【讨论】: