2016-02-04 60 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

我喜歡這個答案的每一部分 - 我也學到了一些東西。 –

相關問題