2014-10-27 589 views
4

当我在C程序中使用指针指向PC程序时,它是否指向变量的物理地址或虚拟地址?C指针是指物理地址还是虚拟地址

int x = 10; 
int* ptr = &x; 
+0

通常在大多数操作系统的情况下(Windows,Linux,MAC)到虚拟内存,然后MMU将它映射到真实的物理地址。 – Mazeryt 2014-10-27 10:48:32

回答

11

这取决于。

如果您正在编写的应用程序将在操作系统之上运行,即在用户模式下并且操作系统使用虚拟内存,它将指向一个虚拟地址(或者说,它将指向一个物理地址但不是实际使用的物理地址)。

如果您使用的是没有虚拟内存的操作系统,或者如果您正在编写(部分)内核代码,它将指向物理地址。

4

这取决于你的操作系统!

在Windows和Linux中,它是典型的虚拟内存!用户空间应用程序也不能使用物理地址访问内存。

1

如果是底层操作系统(不考虑嵌入式系统),并且它不是一种特殊的低级应用程序(驱动程序,堆栈),则地址将始终为虚拟。

0

这个问题是无关紧要的。 如果有虚拟内存管理器,那么你看不到它,如果没有,那么你也看不到。