2016-02-04 59 views

回答

29

Box::new只是一个函数,就像任何其他函数一样。这在任何方面都不是特别的。它肮脏,微微地嗅到非常接近过期日期的奶酪的味道。

box是魔术,弥补了地面小精灵和小孩的梦想。它穿着最漂亮,最时髦的衣服,并带有新鲜松木的淡淡芳香。

当您执行Box::new(e),因为它是一个函数,e必须彻底评估,并以前建造可以开始通话。如果这意味着在堆栈上分配和填充一个500kB结构,那么它必须在堆栈上分配并填充一个500kB结构,然后将然后传递给Box::new,其中只有可以在堆上分配空间可能会失败),,然后将500kB复制到堆中。

当您执行box e,因为它是美好的就像在一个炎热的夏日凉风,编译器可以重新排序的东西,使得它通过在堆中分配的500KB,然后填充500KB结构开始直接堆在。然后就完成了。没有额外的复制,没有咀嚼堆栈空间。没有浪费的努力,如果“分配在堆上”的事情没有解决。

box是生命,box是爱;全部冰雹box!这是一个很好的解决方案,它可以帮助你解决这个问题,你可以使用它来解决这个问题,但是如果你需要一个夜间编译器来获得它的光芒,我会展示自己...)

+0

是不是'box'关键字应该涵盖自定义分配(即,分配的东西*其他*盒*)?或者它被置换为'<-'? –

+1

'box'将通过推理支持“Box”(*例如*'Rc','Arc',* etc. *)以外的东西。 '< - '是* placement *的当前临时语法,它是相关的,但不同的是:'box'创建一个新的地方来放置一个值然后放在那里,'<-'在* exists *放置(例如,在矢量的末尾)。 –

+1

我喜欢这个答案的每一部分 - 我也学到了一些东西。 –

相关问题