在Learning Rust With Entirely Too Many Linked Lists中,作者声称此代码是统一分配的。这是什么意思?
library(geomorph)
#Locate image to digitize the distance between two points
digitize2d("Capnoides.jpg", nlandmarks = 2, scale = 1, "Capnoides.tps",
verbose=TRUE)
答案 0 :(得分:4)
它只是意味着所有Node
个对象都在堆上分配(通过Box
),而没有List
个对象被装箱(或需要装箱),尽管它们可能是盒装Node
的一部分。这种特殊表示的效果是每个节点只有一个堆分配,而且没有用于Empty
链接的堆分配。
在列表上操作时,我们必须操纵节点。特别是,可能需要将节点从一个列表移动到另一个列表。如果你有一个盒装和非盒装节点的混合,那么将一个节点的所有权从一个列表转移到另一个列表或者涉及拆箱和重新装箱节点(即分配一个新盒子并释放旧盒子),或者写入重复或中等复杂的通用代码仅在必要时装箱/拆箱。另一方面,如果你总是有一个Box<Node>
,那么处理起来要简单得多:只需移动整个Box<Node>
(只复制一个指针)。