假设我们在C语言中编写程序并打印其中一个变量的地址,那么在屏幕上打印出来的地址是变量的虚拟地址还是物理地址?如果是虚拟地址,为什么它仍然具有与物理内存位范围相同的范围?例如,在32位机器上,如果返回0x833CA23E。
一些操作系统(某些版本)还使用英特尔的物理地址扩展(PAE)来使整个系统能够访问超过4 GB的RAM,但即使在使用这些操作系统时,任何单个运行在系统上的进程仍然受限于寻址4 GB(即,使用PAE,您可以每个进程有一个4 GB的限制,而旧系统则总共只能寻址4 GB,需要在进程之间分配)。
在多数情况下,它将是一个32位的虚拟地址。
如果您的操作系统支持分页,那么它将是虚拟地址。可以使用分页将其映射到相同的物理地址。Linux和Windows都支持分页。
另一个重要因素是架构。在Intel x86 32位系统上,它将是32位地址。地址的前10位用于获取页面表。第二个10位用于从所选页面表获取页面。最后12位将给出该页面中的实际物理地址。
希望这回答了您的问题。