Rust 使用box关键字和box::new有什么区别?

Rust 使用box关键字和box::new有什么区别?,rust,heap,Rust,Heap,box只是语法上的糖分,还是可以应用于box::new不够的用例?我在某个地方读到,box是不稳定的,这是否意味着我只能在夜间生锈的版本中使用它?box::new和其他任何函数一样,只是一个函数。它在任何方面都不是特别的。它脏兮兮的,闻起来隐约有一股接近保质期的奶酪味 box是一种魔法,是由小精灵和孩子们的梦想组成的。它穿着最好、最时髦的衣服,身上带着刚割下的松树的淡淡香气 当您执行Box::new(e)时,因为它是一个函数,e必须经过完整的计算和构造,才能启动调用。如果这意味着在堆栈上分配和填

box
只是语法上的糖分,还是可以应用于
box::new
不够的用例?我在某个地方读到,
box
是不稳定的,这是否意味着我只能在夜间生锈的版本中使用它?

box::new
和其他任何函数一样,只是一个函数。它在任何方面都不是特别的。它脏兮兮的,闻起来隐约有一股接近保质期的奶酪味

box
是一种魔法,是由小精灵和孩子们的梦想组成的。它穿着最好、最时髦的衣服,身上带着刚割下的松树的淡淡香气

当您执行
Box::new(e)
时,因为它是一个函数,
e
必须经过完整的计算和构造,才能启动调用。如果这意味着在堆栈上分配和填充500kB结构,那么它必须在堆栈上分配和填充500kB结构,然后将其传递给
Box::new
,只有这样才能在堆上分配空间(可能会失败),然后将该500kB复制到堆中

当您执行
方框e
时,因为它就像炎热夏天的凉风一样美妙,编译器可以重新排序,这样它就可以开始在堆上分配500kB,然后直接在堆上填充500kB结构。然后就完成了。没有额外的复制,没有咀嚼通过堆栈空间。如果“在堆上分配”的事情失败了,就不会浪费精力

box
是生命,
box
是爱;所有冰雹


(是的,在写这篇文章时,它仍然不稳定,这意味着你需要一个夜间编译器来享受它的光芒。但是很快,黎明就要到来了。明白吗?黎明?夜间?…我会展示自己…

这个
关键字不是应该包括自定义分配(即,分配一个
框以外的东西
)吗?)?或者将其替换为placement
box
将通过推理支持除
box
以外的内容(例如
Rc
Arc
等)<我喜欢这个答案的每一部分——我也学到了一些东西。