C 当我们联想到'&';对于一个变量,我们得到的地址是虚拟地址还是物理地址? #包括 int main() { INTA; printf(“%u”、&a); 返回0; }

C 当我们联想到'&';对于一个变量,我们得到的地址是虚拟地址还是物理地址? #包括 int main() { INTA; printf(“%u”、&a); 返回0; },c,operating-system,C,Operating System,我们得到的地址是进程的虚拟地址或 进程在主内存中运行时的物理地址。 请帮忙 我很困惑 具有虚拟内存的系统上的进程总是处理虚拟地址。您将无法从进程中使用物理地址 通过使程序在循环中运行并延迟打印值,然后运行同一程序的多个副本,最容易验证这一点。它们很可能会打印相同的地址(除非操作系统随机使用虚拟地址),如果地址是物理地址,这当然是不可能的。如果在具有虚拟内存的系统上运行程序,您将获得一个虚拟地址。如果您在没有虚拟内存的系统(通常是较小的嵌入式系统)上运行,您将获得一个物理地址 还要注意的是,指针的

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

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


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

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


还要注意的是,指针的格式
“%u”
是错误的,如果要使用
printf
打印指针,则应使用
“%p”
。参见,例如…

谁告诉过你地址是“虚拟的”还是“物理的”?当然不是C!你可以检查这些答案。。。你得到的是当你
*
得到结果时,你得到的是你开始使用的同一个变量。如果您依赖的不是这个事实,那么您依赖的是实现细节,而不是语言的保证。但是如果假设必须改变变量“a”的值,那么操作系统是如何做到的呢??
#include<stdio.h>
 int main()
 {
   int a;
   printf(" %u ",&a);
   return 0;
 }