装箱清单的第一个缺点是否在堆栈上?

时间:2018-06-26 20:46:28

标签: rust

我是reading about the Box type,并且在该章中提供了Cons列表:

enum List {
    Cons(i32, Box<List>),
    Nil,
}

我明白了为什么Rust不允许在List内放置另一个List(请参见清单15-2),并且我也知道Box<List>如何解决该问题(请参见清单15-5)。

由于List被放在Box中,这是否意味着只有第一个Cons会在堆栈中指向堆中的List指针?剩下的Cons呢?他们会在堆栈上吗?当List处于堆中时,它们如何在堆栈中?还是它们在堆中(听起来不错)?

1 个答案:

答案 0 :(得分:2)

是的。可以在堆栈上创建第一个Cons,但是随后的链接Cons将在堆上分配,因为它们是通过Box间接表示的,而Cons表示在堆上分配的类型。假设您自然/正常地在堆栈上创建第一个Box,但是当然也可以通过Cons在堆上创建它,在这种情况下,它们都将在堆上甚至第一个$mysqliDriver->report_mode