当我运行以下程序来查看变量的地址时:
#include <stdio.h>
int main(){
int i = 154;
printf("%p",&i);
return 0;
}
我得到 0x7fff578bdfac(十进制 140734662172588),而我的电脑 RAM 只有 32GB。 为什么会这样?
您正在打印一个虚拟地址(并且没有合理的方法来找到相应的物理地址)。 虚拟地址不限于 0..最大内存。
在现代操作系统中,用户进程不使用物理内存地址,而是使用虚拟寻址。
操作系统会将一块物理内存映射到一个进程,并给它一个(有点任意的)起始地址。 因此,在 64 位操作系统中,理论上该进程可以具有 64 位值范围内的任何值。