当我们打印变量的地址时,会打印哪个地址?
如果是虚拟内存,为什么会这样呢?
任何人都可以解释一下......
答案 0 :(得分:5)
在现代桌面/服务器操作系统上,所有内存都是虚拟内存。我不知道有任何方法可以从内核外部访问底层物理地址。即使有可能,它也不会在绝大多数情况下有用。
因此,如果你执行printf("%p", (void*)&variable);
,它将打印当前进程的变量的虚拟地址。
答案 1 :(得分:0)
虚拟内存地址被打印出来,因为你不需要物理地址,操作系统的全部意义在于防止你不得不处理物理地址(不仅如此)那,但它也是:D)。
答案 2 :(得分:-2)
在普通的PC电脑上,如果你将poitner转换为相同大小的整数,它就是你得到的值。
void *p = something;
int i = *(int*)p;
printf("%x", i);
内存地址是虚拟的,当然是,因为这是执行代码的过程如何解决你的comupter中的内存。该过程无法看到物理内存。