堆、栈、Box语法
Rust函数中声明的变量、以及返回都是基于栈的。Rust的堆内存由Box来分配资源。
Rust内部实现了jemalloc,使用Box::new(T) 会使用jemalloc分配一块内存。
Box与Java中的基础类型装箱是一样的。
Integer i = new Integer(12);
等价于
let i = Box::new(12);
Box申请的内存在变量超出作用域时就会自动把内存回收。
{
let x = Box::new(12);
}
// 内存被释放。
这段代码等价于:
int *x = (int *)malloc(sizeof(int));
// ...
free(x);
需要注意,如果结构体或枚举的定义中存在递归,则必须要使用Box来定义。
定义:
struct Node{
subNode:Node
}
// 无法通过编译。
struct Node{
subNode:Box<Node>
}
// 编译通过。