Cons List 是否具有堆分配数据或堆栈分配数据的 属性?
Does Cons List have the property of a heap-allocated data or stack-allocated data?
来自 Rust Programming Language Book 第 15 章列表 15-5,它使用 Box<T>
进行间接寻址,因此 Rust 编译器可以知道类型列表的大小。
据我了解,在以下示例中,Cons(1, address_x) 是堆栈分配的,Cons(2, address_y) & Cons(3, address_z)是堆分配的。
我想知道当一个变量同时具有堆栈分配数据和堆分配数据时,它是否同时具有数据的属性? IE。在这种情况下,变量 list
是否具有堆栈分配数据或堆分配数据的 属性(例如预先实现复制特征)?
- address_x 指向 Cons(2, address_y)
- address_y 指向 Cons(3, address_z)
enum List {
Cons(i32, Box<List>),
Nil,
}
use crate::List::{Cons, Nil};
fn main() {
let list = Cons(1, Box::new(Cons(2, Box::new(Cons(3, Box::new(Nil))))));
}
只有第一个 Cons
(父级)是堆栈分配的,所有其他的都是根据您在其上使用的 Boxing
包装器分配的堆。
然后:
I am wondering does variable list has the property of stack-allocated data or heap-allocated data in this case?
因为它拥有第一个 Const
它也是基于堆栈的。
A variable is a component of a stack frame, either a named function
parameter, an anonymous temporary, or a named local variable.
A local variable (or stack-local allocation) holds a value directly,
allocated within the stack's memory. The value is a part of the stack
frame.
关于特征问题:变量只是标识符数据是保存属性的东西。因此,无论 属性 List
数据类型持有什么,您都可以从拥有它的变量中使用它。
类型不是“堆栈分配”或“堆分配”。它们可以以各种不同的方式分配,并且完全不知道它们的底层存储。
- 在
let list = List::Nil
中,列表分配在栈上。
- 在
let list = Box::new(List::Nil)
中,列表分配在堆上。
- 在
static list: List = List::Nil
中,列表分配在程序的数据段。
来自 Rust Programming Language Book 第 15 章列表 15-5,它使用 Box<T>
进行间接寻址,因此 Rust 编译器可以知道类型列表的大小。
据我了解,在以下示例中,Cons(1, address_x) 是堆栈分配的,Cons(2, address_y) & Cons(3, address_z)是堆分配的。
我想知道当一个变量同时具有堆栈分配数据和堆分配数据时,它是否同时具有数据的属性? IE。在这种情况下,变量 list
是否具有堆栈分配数据或堆分配数据的 属性(例如预先实现复制特征)?
- address_x 指向 Cons(2, address_y)
- address_y 指向 Cons(3, address_z)
enum List {
Cons(i32, Box<List>),
Nil,
}
use crate::List::{Cons, Nil};
fn main() {
let list = Cons(1, Box::new(Cons(2, Box::new(Cons(3, Box::new(Nil))))));
}
只有第一个 Cons
(父级)是堆栈分配的,所有其他的都是根据您在其上使用的 Boxing
包装器分配的堆。
然后:
I am wondering does variable list has the property of stack-allocated data or heap-allocated data in this case?
因为它拥有第一个 Const
它也是基于堆栈的。
A variable is a component of a stack frame, either a named function parameter, an anonymous temporary, or a named local variable.
A local variable (or stack-local allocation) holds a value directly, allocated within the stack's memory. The value is a part of the stack frame.
关于特征问题:变量只是标识符数据是保存属性的东西。因此,无论 属性 List
数据类型持有什么,您都可以从拥有它的变量中使用它。
类型不是“堆栈分配”或“堆分配”。它们可以以各种不同的方式分配,并且完全不知道它们的底层存储。
- 在
let list = List::Nil
中,列表分配在栈上。 - 在
let list = Box::new(List::Nil)
中,列表分配在堆上。 - 在
static list: List = List::Nil
中,列表分配在程序的数据段。