【发布时间】:2013-10-20 19:33:50
【问题描述】:
我可以使用以下代码打印指针的地址
#include<stdio.
int main(){
int *q =(int*) malloc(4);
printf("%x\n",q);
}
当我执行以下代码时,会打印一个十六进制值。它是堆上变量 q 的虚拟地址还是物理地址?如果它是虚拟的,我应该如何打印另一个?
【问题讨论】:
-
总是虚拟地址,物理地址对你隐藏。
-
@ouah 有没有办法打印物理地址?
-
@SanjeevSharma btw 使用
%p而不是%x并将地址类型转换为void*作为printf("%p\n", (void*)q); -
应该是
int *q = malloc(sizeof *q);。 -
有些计算机没有虚拟内存——在这种情况下它是物理地址。但是如果操作系统使用虚拟内存,那么它就是一个虚拟地址。如果它是一个虚拟地址,那么只有操作系统知道它的映射位置。这可能有助于解释:youtube.com/watch?v=l7HoguhFVQ4