为什么在块的末尾而不是立即释放内存?

问题描述 投票:0回答:1

我认为最好是在最后一次使用变量后释放内存(在第2行之后),但是为什么编译器在大括号末尾(第4行)释放x1使用的内存?

fn main() {
    let x1 = 123;
    println!("Made a ToDrop!");
}
memory-management rust
1个回答
0
投票

这是编译器的决定:在调试模式下,它编译为

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
    }
} 
© www.soinside.com 2019 - 2024. All rights reserved.