在Learning Rust With Entirely Too Many Linked Lists中,作者声称此代码是统一分配的 . 那是什么意思?
struct Node {
elem: i32,
next: List,
}
pub enum List {
Empty,
More(Box<Node>),
}
在Learning Rust With Entirely Too Many Linked Lists中,作者声称此代码是统一分配的 . 那是什么意思?
struct Node {
elem: i32,
next: List,
}
pub enum List {
Empty,
More(Box<Node>),
}
1 回答
它只是意味着所有
Node
对象都在堆上分配(通过Box
),而没有List
对象被装箱(或需要装箱),尽管它们可能是盒装Node
的一部分 . 此特定表示形式的效果是每个节点只有一个堆分配,并且没有针对Empty
的链接的堆分配 .在列表上操作时,我们必须操纵节点 . 特别是,可能需要将节点从一个列表移动到另一个列表 . 如果你有盒装和非盒装节点的混合,那么将节点的所有权从一个列表转移到另一个列表或者涉及拆箱并重新装箱节点(即分配新盒子并释放旧盒子),或者写入重复或中等复杂的通用代码仅在必要时装箱/取消装箱 . 另一方面,如果你总是有
Box<Node>
,那么它处理起来要简单得多:只需移动整个Box<Node>
(只复制一个指针) .