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

ant*_*oyo 6 region rust

例如,如果我们忘记了返回值优化,并且具有以下代码:

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

fn main() {
    let boxed_string = func();
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 12

虽然寿命可真可在同样的意义了基于区域的内存管理被称为"地区"一样,铁锈并不会自动管理基于他们的记忆.寿命仅用于静态分析.内存以正常方式分配 - 寄存器,堆栈,堆(某些C样式malloc函数),如果在包中手动实现,可能还有其他抽象,如内存池typed-arena.然后,编译器使用区域的概念来分析这种完美的普通内存管理,但这根本不会影响运行时行为.事实上,在生成机器代码之前,生命周期将从程序中删除.

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

  • 我真的不知道,不过我知道GCC没有将垃圾收集器链接到所有程序的位置.这只是......常识,可以这么说. (3认同)
  • 感谢您的回答。您知道在哪里记录吗? (2认同)