Я пытаюсь понять, как Rust работает с памятью, и у меня есть небольшая программа, которая печатает некоторые адреса памяти:
fn main() {
let a = &&&5;
let x = 1;
println!(" {:p}", &x);
println!(" {:p} \n {:p} \n {:p} \n {:p}", &&&a, &&a, &a, a);
}
Это печатает следующее (различается для разных прогонов):
0x235d0ff61c
0x235d0ff710
0x235d0ff728
0x235d0ff610
0x7ff793f4c310
На самом деле это сочетание 40-битных и 48-битных адресов. Почему эта смесь? Кроме того, может кто-нибудь сказать мне, почему адреса (2, 3, 4) не попадают в места, разделенные 8 байтами (так как std::mem::size_of_val(&a)
дает 8)? Я использую Windows 10 на процессоре AMD x-64 (Phenom || X4) с 24 ГБ ОЗУ.