当我们将“&”与变量关联时,我们得到的地址是虚拟地址还是物理地址?

use*_*412 5 c operating-system

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

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

Som*_*ude 6

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

另请注意,"%u"指针的格式是错误的,如果要printf用于打印指针,则应使用"%p". 参见例如这个参考


unw*_*ind 4

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

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