Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我可以使用以下代码打印指针的地址
#include<stdio. int main(){ int *q =(int*) malloc(4); printf("%x\n",q); }
当我执行以下代码时,会打印一个十六进制值。是堆上变量 q 的虚拟地址还是物理地址?如果它是虚拟的,我应该如何打印另一个?
它是在虚拟地址空间方面。在标准 C 中获得“物理”地址是不可能的(除非你在一个没有虚拟内存的系统上,当然,在这种情况下它总是物理地址)——如果它当前在交换空间中,例如,除了磁盘上的当前位置之外,它甚至可能没有一个,这对您来说不是很有用。
程序无法知道它是虚拟地址还是物理地址。内存由操作系统和 MMU 处理,MMU 将地址分发给程序。