堆、栈、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>
}
// 编译通过。

results matching ""

    No results matching ""