【发布时间】:2016-05-14 01:53:03
【问题描述】:
box 只是语法糖还是可以应用于Box::new 不够用的用例?我在某处读到 box 不稳定,这是否意味着我只能在夜间 Rust 版本中使用它?
【问题讨论】:
标签: rust heap-memory
box 只是语法糖还是可以应用于Box::new 不够用的用例?我在某处读到 box 不稳定,这是否意味着我只能在夜间 Rust 版本中使用它?
【问题讨论】:
标签: rust heap-memory
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 以外的事物(例如 Rc、Arc、等)。 <- 是 placement 的当前临时语法,它是相关的,但不同:box 创建一个新位置来放置一个值,然后将它放在那里,<- 将一个值放在一个现有的位置(例如,在向量的末尾)。