我是Rust的新手,我正在尝试了解应该使用Box
而不是常规参考。
我可以找到的所有示例都显示了如何使用Box
,但没有一个示例说明您应该在常规&
引用中使用它们的情况。
答案 0 :(得分:6)
(除了Shepmaster之外的其他答案:另一种想法所有权的方法)
➡您始终需要考虑:生活的价值在哪里?
例如,数据可以存在于堆栈,可执行文件的某个特殊位置或Box
中。另一方面,参考不是生活的地方 - 它只是指向某些生活 其他地方的数据。所以:
答案 1 :(得分:4)
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部分;我鼓励你们同时阅读。