1

当我们打印变量的地址时,会打印哪个地址?

如果是虚拟内存,那为什么会这样呢?

任何人都可以解释更多...

4

3 回答 3

5

在现代桌面/服务器操作系统上,所有内存都是虚拟内存。我不知道有任何方法可以从内核外部访问底层物理地址。即使有可能,它在绝大多数情况下也不会有用。

因此,如果您这样做printf("%p", (void*)&variable);,它将打印当前进程的变量的虚拟地址。

于 2011-01-20T09:39:54.430 回答
0

虚拟内存地址被打印出来,因为你不需要物理地址,操作系统的全部目的是防止你不得不处理物理地址(不仅如此,但也是这样:D)。

于 2011-01-20T09:40:56.243 回答
-2

在普通的 PC 计算机上,它是一个将 poitner 转换为相同大小的整数的值。

void *p = something;
int i = *(int*)p;
printf("%x", i);

内存地址是虚拟的,当然是的,因为这就是执行代码的进程如何寻址计算机中的内存。进程看不到物理内存。

于 2011-01-20T09:38:55.537 回答