Rust 使用基于区域的内存管理吗?

Is Rust using region-based memory management?

例如,如果我们忘记 return 值优化,并有以下代码:

fn func() -> Box<String> {
    Box::new(String::new())
}

fn main() {
    let boxed_string = func();
}

编译器会创建区域来管理内存还是会使用正常的堆分配?

我知道这个简单的代码可能会被优化,但在更复杂的代码中,情况可能并非如此。

虽然生命周期可以在与基于区域的内存管理相同的意义上被称为 "regions",但 Rust 不会 基于它们自动管理内存。生命周期仅用于静态分析。内存以正常方式分配——寄存器、堆栈、堆(一些 C 风格的 malloc 函数),如果像在 typed-arena crate 中手动实现的那样,可能还有其他抽象,如内存池。然后编译器使用区域的概念分析这种非常普通的内存管理,但这根本不会影响 运行 时间行为。事实上,甚至在生成机器代码之前,生命周期就从程序中删除了。

但是,您的代码中可能还有其他 移动 Box::new 是一个将参数移动到其中的普通函数,同样 String::new 的 return 可能涉及移动。