Rust中统一分配是什么意思?

Jal*_*Jal 3 rust

Learning Rust With Entirely Too Many Linked Lists中,作者声称这段代码是统一分配的。这意味着什么?

struct Node {
    elem: i32,
    next: List,
}

pub enum List {
    Empty,
    More(Box<Node>),
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*gné 5

它只是意味着所有Node对象都在堆上分配(通过Box),而没有List对象被装箱(或需要装箱),尽管它们可能是装箱的一部分Node。这种特定表示的效果是每个节点只有一个堆分配,并且没有指向 的链接的堆分配Empty

当对列表进行操作时,我们必须操作节点。特别是,可能需要将节点从一个列表移动到另一个列表。如果您混合有装箱和未装箱的节点,则将节点的所有权从一个列表转移到另一个列表要么涉及对节点进行拆箱和重新装箱(即分配新框并释放旧框),要么编写重复或中等复杂的通用代码仅在必要时装箱/拆箱。另一方面,如果你总是有一个Box<Node>,那么处理起来要简单得多:只需移动整个Box<Node>(它只复制一个指针)。