【发布时间】:2012-03-08 06:33:02
【问题描述】:
int a;
printf("address is %u", &a);
这是哪个地址..?我的意思是这是编译器生成的地址,即虚拟地址还是加载程序在 RAM 中给定的物理地址..?
由于它每次打印不同的地址,我想它必须是 RAM 中的地址。只是想确定一下。
请提供任何可以参考您的答案的链接。
【问题讨论】:
-
最有可能是虚拟的。除非你用真实地址空间编程系统,例如 arduino
-
如果这是用于 Windows 7 PC 或类似计算机的,那么是的,它将是一个虚拟地址。但在某些系统上,它将是物理内存地址。由于您没有告诉我们您使用的是什么系统,因此无法回答问题。
-
如果存在虚拟地址到物理地址的转换,则这是一个虚拟地址。如果不是,则为物理的(除非您的程序在解释器或 VM 中运行,在这种情况下,它可能是其他东西)。此地址基于加载程序为您的应用程序选择的位置。由于各种原因,此地址可能会有所不同(例如安全原因或只是上一个位置已被其他东西占用)。
标签: c compiler-construction virtual loader memory-address