在操作系统和计算机体系结构中,物理内存指的是计算机实际上拥有的内存空间,也就是计算机的RAM(随机存取存储器)。它是有限的,并且大小受到计算机硬件的限制。物理内存是直接用于存储和检索数据和指令的地方,包括操作系统、应用程序以及这些程序正在使用的数据等。
虚拟内存则是一种内存管理技术,它使得应用程序以为它们拥有连续可用的内存(一个连续完整的地址空间),而实际上是被分隔到多个物理内存区域,甚至可能包括磁盘上的存储(被称为交换空间或分页文件)。当程序尝试访问其地址空间中的某个部分时,如果该部分当前不在物理内存中,操作系统就会触发一个称为页面错误(或称为缺页)的事件,然后将所需的页面从磁盘加载到物理内存中。
在C++编程中,程序员通常不需要直接管理虚拟内存和物理内存,因为这些工作都是由操作系统和编译器在底层处理的。然而,了解这些概念对于理解程序的性能特征(如内存使用、缓存行为等)以及进行高级优化(如使用特定的内存分配策略)是非常有帮助的。
一些关键点:
-
地址空间:每个进程都有自己的虚拟地址空间,这使得它能够像访问真正的物理内存一样访问它的代码和数据,而不管它们实际上是否都在内存中。
-
分页:虚拟内存系统通常将虚拟地址空间划分为固定大小的块,称为页。物理内存也被划分为同样大小的帧。页可以映射到帧上,从而实现从虚拟地址到物理地址的转换。
-
页面置换算法:当物理内存已满,并且需要加载新的页面时,操作系统必须选择一个现有的页面进行置换(即将其移出物理内存,以便为新页面腾出空间)。有多种页面置换算