【问题标题】:What is the difference between using the box keyword and Box::new?使用 box 关键字和 Box::new 有什么区别?
【发布时间】:2016-05-14 01:53:03
【问题描述】:

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

【问题讨论】:

    标签: rust heap-memory


    【解决方案1】:

    Box::new 只是一个函数,就像任何其他函数一样。无论如何,它并不特别。它脏兮兮的,散发着微弱的快要保质期奶酪的味道。

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

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

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

    box是生活,box是爱;万岁box

    (是的,在撰写本文时,它仍然不稳定,这意味着您需要一个夜间编译器来沐浴在它的光芒中。但是很快,黎明就会到来。明白了吗?黎明?夜间?。 ..我会展示自己的...)

    【讨论】:

    • 难道box 关键字不应该涵盖自定义分配(即,分配的东西else 而不是Box)?还是要换成展示位置<-
    • box 将通过推理支持Box 以外的事物(例如 RcArc)。 <-placement 的当前临时语法,它是相关的,但不同:box 创建一个新位置来放置一个值,然后将它放在那里,<- 将一个值放在一个现有的位置(例如,在向量的末尾)。
    • 我很喜欢这个答案的每一部分——我也学到了一些东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 2020-10-25
    • 2011-09-28
    • 2010-09-15
    • 2018-08-02
    • 2012-10-16
    相关资源
    最近更新 更多