【发布时间】:2019-06-16 20:32:19
【问题描述】:
例如,当我们写:int a;
并且做&a给我们一些十六进制形式的地址0x12345678,我们称之为虚拟地址。
现在当我们尝试做 int *temp = 0xfe000000;
这个地址是像虚拟地址还是物理地址?据我所知,虚拟地址由操作系统提供,然后由 MMU 进一步转换为物理地址。
据我所知,分页机制发生在将虚拟地址映射到可用物理地址之间。当我们给指针一个地址时会发生什么?该地址是像虚拟地址一样,然后由 MMU 处理以指向特定的物理地址,还是它本身就像一个物理地址?
int temp;
printf("%x \n", &temp);
int *temp2 = 0xfe000000; //This is just an example address. It could be any address
这个地址(0xfe000000)是像真实物理地址还是虚拟地址?
【问题讨论】:
-
取决于平台。在现代操作系统上,所有地址都是虚拟的,您无法从普通用户模式程序中寻址物理地址,只能从驱动程序中寻址,但这是另一回事。另一方面,在简单的微控制器上,您只能访问物理地址,因为没有虚拟内存。
-
简短回答:虚拟。
标签: c operating-system