box
只是语法糖还是可以应用于Box::new
不足的用例?我在某处看到box
不稳定,这是否意味着我只能在夜间Rust版本中使用它?
答案 0 :(得分:37)
Box::new
只是一个函数,就像任何其他函数一样。它在任何方面都不是特别的。它很肮脏,闻起来非常接近过期的奶酪。
box
是神奇的,构成了小精灵和小孩子的梦想。它穿着最精美,最时髦的衣服,并带有新鲜切松的淡淡香气。
当您执行Box::new(e)
时,因为它是一个函数,{<1}}必须在之前完全评估并构造才能启动调用。如果这意味着在堆栈上分配和填充500kB结构,那么它必须在堆栈上分配并填充500kB结构,然后将其传递给e
,仅然后可以在堆上分配空间(可能会失败),然后将500kB复制到堆中。
当你执行Box::new
时,因为在炎热的夏天,它就像凉风一样美妙,编译器可以通过分配500kB来重新排序开始之类的东西在堆上,然后直接在堆上填充500kB结构 。然后就完成了。没有额外的复制,没有咀嚼堆栈空间。如果&#34;在堆上分配&#34;没有浪费的努力。事情没有成功。
box e
是生命,box
是爱;所有的欢呼box
!
(是的,在撰写时,它仍然不稳定,这意味着你需要一个夜间编译器来晒太阳。但很快,黎明将会到来。得到它?黎明?每晚?......我会把自己展示出来......)