当我们联想'&'时使用变量我们得到的地址是虚拟地址还是物理地址?

时间:2014-01-27 13:56:29

标签: c operating-system

#include<stdio.h>
 int main()
 {
   int a;
   printf(" %u ",&a);
   return 0;
 }

我们获得的地址是流程的虚拟地址或     进程在主内存中运行时的物理地址。     请帮忙     我很困惑!!

2 个答案:

答案 0 :(得分:3)

如果在具有虚拟内存的系统上运行该程序,您将获得一个虚拟地址。如果您在没有虚拟内存的系统(通常是较小的嵌入式系统)上运行,您将获得一个物理地址。

另请注意,如果您要使用"%u"打印指针,则printf指针的格式"%p"是错误的。{{1}}。参见例如this reference

答案 1 :(得分:1)

具有虚拟内存的系统上的进程始终处理虚拟地址。您将无法在进程中使用物理地址。

通过使程序在循环中运行并以一定的延迟打印该值,然后运行同一程序的多个副本,可以最容易地验证这一点。有可能他们将打印相同的地址(除非操作系统随机化虚拟地址使用),如果地址是物理的,这当然是不可能的。