示例代码:
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
为什么生锈不释放内存,而是在分配值相同的情况下重用它,否则分配新的内存块?
优化编译器可以使用许多技巧来确定是否可以为变量分配常量值。您的发现与此一致,如果不需要,则无需运行重复的代码。