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