为什么 Rust 重用具有相同值的内存

Why does Rust reuse memory with same value

示例代码:

fn main() {
    let mut y = &5; // 1

    println!("{:p}", y);

    {
        let x = &2; // 2
        println!("{:p}", x);
        y = x;
    }

    y = &3; // 3
    println!("{:p}", y);
}

如果第三个赋值包含&3那么代码输出:

0x558e7da926a0
0x558e7da926a4
0x558e7da926a8

如果第三个赋值包含&2(与第二个赋值相同的值)那么代码输出:

0x558e7da926a0
0x558e7da926a4
0x558e7da926a4

如果第三个赋值包含&5(与第一个赋值相同的值)那么代码输出:

0x558e7da926a0
0x558e7da926a4
0x558e7da926a0

为什么 rust 不释放内存,而是在分配值相同时重用它,否则分配新的内存块?

优化编译器可以使用很多技巧来确定是否可以为变量分配常量值。您的发现与此一致,不需要运行重复代码。

无法区分两次出现的相同文字数字。您不能期望两个文字的地址相同,也不能期望它们不同。

这允许编译器(但实际上它可以自由地做其他事情)在可执行代码中发出一个 5 数据,并让所有 &5 引用它。常量可能(见注释)也有一个静态生命周期,在这种情况下它们在程序执行期间不是allocated/deallocated,它们总是被分配。