繁体   English   中英

虚拟内存或物理内存

[英]Virtual Memory or Physical Memory

假设我们用C编写一个程序并打印程序中声明的一个变量的地址,那么在屏幕上打印的地址是虚拟地址还是变量的物理地址? 如果它是虚拟地址,为什么它仍然具有与物理内存的位范围相同的范围? 例如。 对于32位机器,如果它返回0x833CA23E。

该地址将成为虚拟内存中虚拟地址 ,因为应用程序不了解物理内存 这是由内核和MMU隐藏的。

我不确定你的意思是同一个“位范围”。 如果你有一个32位的地址空间,它将覆盖整个32位空间,无论你有多少物理内存。 同样适用于64位。

在大多数典型情况下(Windows,Linux等),它将是一个虚拟地址。

在Linux和Windows等典型情况下,虚拟地址和物理地址通常都是32位,因此数字在同一范围内变得不可避免。 可以分配4GB以上的内存,当/如果你这样做,你最终大于32位的地址-但除非你采取特殊的步骤来做到这一点,一个32位的地址是你”我会默认获取。

当您在32位操作系统下使用超过4 GB的内存时,通常是通过一些特殊的API来实现,例如Windows的Address Windowing Extensions 使用这些,您可以访问超过4 GB的RAM, 默认情况下不会发生甚至接近便携式的代码。

一些(某些版本的)操作系统也使用英特尔的物理地址扩展(PAE)来为系统提供超过4 GB RAM的整体访问权限,但即使在使用它们时,系统上运行的任何单个进程仍然是仅限于4 GB(即,使用PAE,每个进程可以限制为4 GB,而旧系统的总数限制为4 GB,在进程之间按需分配)。

在大多数情况下,它将是一个32位的虚拟地址。

如果您的操作系统支持分页,则它将是虚拟地址。 它可以使用分页映射到相同的物理地址。 Linux和Windows进行分页。

另一件重要的事情是架构。 在Intel x86 32位系统上,它将是32位地址。 地址的前10位将用于获取页表。 第二个10位将用于从所选页表中获取页面。 最后12位将为您提供该页面的实际物理地址。

我希望它能回答你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM