【发布时间】:2020-04-07 20:41:59
【问题描述】:
我试图了解 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)?我在具有 24GB RAM 的 AMD x-64 处理器 (Phenom || X4) 上运行 Windows 10。
【问题讨论】: