Win32内存管理涉及虚拟内存与物理内存的交互,虚拟内存是操作系统为程序分配的逻辑地址空间,而物理内存则是实际计算机硬件上的RAM,通过虚拟内存技术,操作系统可以更有效地管理内存资源,提高程序的运行效率,当程序需要更多内存时,操作系统会从硬盘上划出部分空间作为虚拟内存的补充,物理内存的分配和释放也由操作系统管理,以确保程序的正常运行,Win32的内存管理技术为多任务操作系统提供了强大的支持。

我们知道,每个应用程序在运行过程中,都会在虚拟内存空间中拥有自己的独立地址范围,A进程和B进程虽然都在地址123处存储了不同的值,但它们互不影响,这些值都是真实存在于物理内存中的。

在图示中,我们可以清晰地看到虚拟内存与物理内存的对应关系,当我们谈论修改物理内存时,实际上是在影响某个具体进程的数据存储。

对于学过内核驱动开发的人来说,内核驱动读写正是基于这种虚拟与物理内存的映射机制,我曾经编写过一个简单的内核驱动读写程序,相关细节可以在内核驱动目录中查阅。

虚拟内存是一种概念性的存在,它只有在被实际使用时才会被映射到具体的物理内存中。

物理内存的管理

物理内存是以4KB(即4096字节)为单位进行管理的,这个单位也被称为一页,在编程时,尤其是使用API进行内存操作时,我们经常会遇到与“页”相关的概念,因为内存的管理是以“页”为基本单位的。

在图示中,我们可以看到进程A的值是如何被放置在物理内存页面中的,传统上,一个进程的地址空间虽然被划分为4GB,但实际上高2GB是供内核使用的,用户程序只能使用低2GB的空间,而这低2GB的空间中,还有一部分是不能被用户模式直接访问的。

Win32内存管理,虚拟内存与物理内存的交互作用  第1张

当我们在用户模式下编写程序时,可能会申请一些内存,只有当我们真正申请这些内存时,才会有对应的物理页被分配,如果我们想要查看程序使用的具体物理页,可以通过一些调试工具如Windbg来进行操作。

物理页的大小与查看

Win32内存管理,虚拟内存与物理内存的交互作用  第2张

物理页的大小是根据物理内存的总大小来设定的,也就是说,物理内存越大,可以分配的物理页数量就越多,我们可以通过任务管理器来查看系统总的物理页数量。

通过一些计算,我们可以将物理内存大小转换为十六进制数,从而得知可以有多少个物理页,在图中所示的例子中,我们提到了3FF7C个物理页,我们还可以使用Windbg的dd命令来查看相关变量的值。

Win32内存管理,虚拟内存与物理内存的交互作用  第3张

当物理页不足时,操作系统会利用硬盘空间来充当额外的物理内存,这就是所谓的虚拟内存或页面文件。

虚拟内存与页面文件

Win32内存管理,虚拟内存与物理内存的交互作用  第4张

Windows系统允许我们将部分硬盘空间用作虚拟内存,当物理内存不足时,系统会使用这部分空间来模拟额外的内存,我们可以在系统属性中设置虚拟内存的大小,并在硬盘上创建一个名为pagefile.sys的文件来作为虚拟内存的存储空间,这个文件通常是C盘上的一个隐藏文件。

我们可以通过搜索工具如EveryThing来找到这个pagefile.sys文件,虽然增加了虚拟内存可以提高系统的稳定性,但也会占用一定的硬盘空间并可能影响硬盘性能,在设置虚拟内存大小时需要权衡利弊。

Win32内存管理,虚拟内存与物理内存的交互作用  第5张

操作系统可识别内存的限制

我们需要明白的是,即使我们增加了更多的物理内存条,操作系统也不一定会利用所有的可用内存,在32位系统中,最多只能识别64GB的内存,而WinXP系统最多只能识别4GB的内存,这些限制与Windows内核中的页表(PTE、PDE)以及页目录表等机制有关,为了更深入地了解这些内容,我们需要学习Windows内核的相关知识。

Win32内存管理,虚拟内存与物理内存的交互作用  第6张

就是关于Win32之内存管理中的虚拟内存与物理内存的详细解释和相关内容,希望对你有所帮助!更多关于电脑知识的文章,请关注电脑知识网!