询问printf

时间:2011-01-20 09:35:28

标签: memory printf memory-address

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

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

任何人都可以解释一下......

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

在普通的PC电脑上,如果你将poitner转换为相同大小的整数,它就是你得到的值。

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

内存地址是虚拟的,当然是,因为这是执行代码的过程如何解决你的comupter中的内存。该过程无法看到物理内存。