内存地址太大

问题描述 投票:0回答:2

当我运行以下程序来查看变量的地址时:

#include <stdio.h>

int main(){
   int i = 154;

   printf("%p",&i);
   return 0;
}

我得到 0x7fff578bdfac(十进制 140734662172588),而我的电脑 RAM 只有 32GB。 为什么会这样?

c memory-address
2个回答
0
投票

您正在打印一个虚拟地址(并且没有合理的方法来找到相应的物理地址)。 虚拟地址不限于 0..最大内存。


0
投票

在现代操作系统中,用户进程不使用物理内存地址,而是使用虚拟寻址

操作系统会将一块物理内存映射到一个进程,并给它一个(有点任意的)起始地址。 因此,在 64 位操作系统中,理论上该进程可以具有 64 位值范围内的任何值。

© www.soinside.com 2019 - 2024. All rights reserved.