我认为最好是在最后一次使用变量后释放内存(在第2行之后),但是为什么编译器在大括号末尾(第4行)释放x1
使用的内存?
fn main() {
let x1 = 123;
println!("Made a ToDrop!");
}
这是编译器的决定:在调试模式下,它编译为
movl $123, 4(%rsp)
因此它在栈中,将在函数返回的末尾释放。在释放模式下,它将被优化,并且没有123
。
您可以使用drop(heap_var_name);
或者使用新的作用域强制释放作用域{}
的末尾,请尝试this:
fn main() {
let x1 = Box::new(123);
println!("{}", *x1); // 123
drop(x1);
//new scope:
{
let x1 = Box::new(456);
println!("{}", *x1); // 456
}
}