В приведенном ниже примере:
struct Foo {
a: [u64; 100000],
}
fn foo(mut f: Foo) -> Foo {
f.a[0] = 99999;
f.a[1] = 99999;
println!("{:?}", &mut f as *mut Foo);
for i in 0..f.a[0] {
f.a[i as usize] = 21444;
}
return f;
}
fn main(){
let mut f = Foo {
a:[0;100000]
};
println!("{:?}", &mut f as *mut Foo);
f = foo(f);
println!("{:?}", &mut f as *mut Foo);
}
Я обнаружил, что до и после перехода в функцию foo
адрес f
отличается.Почему Rust копирует такую большую структуру везде, но не перемещает ее (или не выполняет эту оптимизацию)?
Я понимаю, как работает стековая память.Но с информацией, предоставленной собственностью в Rust, я думаю, что копию можно избежать.Компилятор излишне копирует массив дважды.Может ли это быть оптимизацией для компилятора Rust?