示例代码:
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
引用它。常量可能(见评论)也有一个静态生命周期,在这种情况下,它们在程序执行期间不会被分配/释放,它们总是被分配。
关于memory - 为什么 Rust 重用具有相同值的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58639442/