2014-10-27 185 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

這個問題是無關緊要的。 如果有虛擬內存管理器,那麼你看不到它,如果沒有,那麼你也看不到。