的物理地址,我可以通过使用下面的代码打印C指针
#include<stdio.
int main(){
int *q =(int*) malloc(4);
printf("%x\n",q);
}
在i执行以下代码印刷有十六进制值打印指针的地址。它是堆上的变量q的虚拟地址还是物理地址?如果它是虚拟的,我应该如何打印另一个?
的物理地址,我可以通过使用下面的代码打印C指针
#include<stdio.
int main(){
int *q =(int*) malloc(4);
printf("%x\n",q);
}
在i执行以下代码印刷有十六进制值打印指针的地址。它是堆上的变量q的虚拟地址还是物理地址?如果它是虚拟的,我应该如何打印另一个?
这是根据虚拟地址空间。在标准C中不可能获得“物理”地址(除非你在没有虚拟内存的系统上,当然,在这种情况下,它总是物理地址) - 如果它当前处于交换空间例如,它甚至可能没有一个磁盘上的当前位置,这对你来说不是很有用。
它总是虚拟地址,物理地址对你来说是隐藏的。 – ouah
@ouah有没有办法打印物理地址? –
@SanjeevSharma btw使用'%p'而不是'%x'和类型转换为'void *'的地址作为'printf(“%p \ n”,(void *)q);' –