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

时间:2016-02-04 12:38:22

标签: rust heap

box只是语法糖还是可以应用于Box::new不足的用例?我在某处看到box不稳定,这是否意味着我只能在夜间Rust版本中使用它?

1 个答案:

答案 0 :(得分:37)

Box::new只是一个函数,就像任何其他函数一样。它在任何方面都不是特别的。它很肮脏,闻起来非常接近过期的奶酪。

box是神奇的,构成了小精灵和小孩子的梦想。它穿着最精美,最时髦的衣服,并带有新鲜切松的淡淡香气。

当您执行Box::new(e)时,因为它是一个函数,{<1}}必须在之前完全评估并构造才能启动调用。如果这意味着在堆栈上分配和填充500kB结构,那么它必须在堆栈上分配并填充500kB结构,然后将其传递给e,仅然后可以在堆上分配空间(可能会失败),然后将500kB复制到堆中。

当你执行Box::new时,因为在炎热的夏天,它就像凉风一样美妙,编译器可以通过分配500kB来重新排序开始之类的东西在堆上,然后直接在堆上填充500kB结构 。然后就完成了。没有额外的复制,没有咀嚼堆栈空间。如果&#34;在堆上分配&#34;没有浪费的努力。事情没有成功。

box e是生命,box是爱;所有的欢呼box

(是的,在撰写时,它仍然不稳定,这意味着你需要一个夜间编译器来晒太阳。但很快,黎明将会到来。得到它?黎明?每晚?......我会把自己展示出来......)