#include<stdio.h>
int main()
{
int a;
printf(" %u ",&a);
return 0;
}
我们获得的地址是流程的虚拟地址或 进程在主内存中运行时的物理地址。 请帮忙 我很困惑!!
答案 0 :(得分:3)
如果在具有虚拟内存的系统上运行该程序,您将获得一个虚拟地址。如果您在没有虚拟内存的系统(通常是较小的嵌入式系统)上运行,您将获得一个物理地址。
另请注意,如果您要使用"%u"
打印指针,则printf
指针的格式"%p"
是错误的。{{1}}。参见例如this reference
答案 1 :(得分:1)
具有虚拟内存的系统上的进程始终处理虚拟地址。您将无法在进程中使用物理地址。
通过使程序在循环中运行并以一定的延迟打印该值,然后运行同一程序的多个副本,可以最容易地验证这一点。有可能他们将打印相同的地址(除非操作系统随机化虚拟地址使用),如果地址是物理的,这当然是不可能的。