我刚接触Rust编程语言,正在尝试理解在何种情况下应该使用Box
而不是常规引用。
我找到的所有示例都展示了如何使用Box
,但没有一个能够解释在什么情况下应该使用它们来替代常规的&
引用。
Box
表示类型是拥有的,并且它在堆上分配。 引用(&
)表示您从其他地方借用该值。
您甚至可以从 Box
获取引用(这里不需要显式类型,仅为了清晰起见而显示):
let boxed: Box<i32> = Box::new(42);
let reference: &i32 = &boxed;
最主要的区别在于所有权。 当您拥有一个值时,您可以对其进行更多的操作,例如销毁它或控制其可变性。
堆和栈也很重要,但不是那么直接。 栈 tends tend to 有一个相对较小的固定大小 ( 在我的机器上是 8MiB ),因此在栈上声明大型变量可能会导致耗尽该内存。 堆 tend tends tend tend tend tend tend tend tend tend tend tend tend tend tend tend tend tend tend tend tend tend 大一些,概念上可以寻址2^32或2^48字节。
The Rust Programming Language有一个关于所有权的部分以及一个关于栈和堆的部分;我鼓励您阅读两者。