打印C指针的物理地址

我可以使用以下代码打印指针的地址

#include<stdio. int main(){ int *q =(int*) malloc(4); printf("%x\n",q); } 

当我执行以下代码时,将打印hex值。 它是堆上变量q的虚拟地址还是物理地址? 如果它是虚拟的我应该如何打印另一个?

这是虚拟地址空间。 在标准C中获取“物理”地址是不可能的(除非你在没有虚拟内存的系统上,当然,在这种情况下它总是物理地址) – 如果它当前在交换空间中例如,除了磁盘上的当前位置之外,它甚至可能没有,这对您来说不是很有用。

程序无法知道它是虚拟地址还是物理地址。 存储器由操作系统和MMU处理,MMU将地址分发给程序。