例如,如果我们忘记了返回值优化,并且具有以下代码:
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的返回可能涉及一个移动.
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |