返回

突破虚拟内存限制:将 Win32 程序扩展到 3GB

前端

引言

在 Windows 操作系统中,32 位进程通常受到虚拟内存 2GB 的限制。这可能会给需要大量内存的应用程序带来挑战。然而,Windows 提供了一种机制,可以将虚拟内存扩展到 3GB,从而为这些应用程序提供更充裕的运行空间。

虚拟内存扩展的必要性

虚拟内存是计算机系统中的一种技术,它允许使用物理内存之外的存储空间来存储程序和数据。当物理内存不足时,虚拟内存允许操作系统将不常使用的页面交换到硬盘上的页面文件中。

对于 32 位进程,默认情况下仅允许使用 2GB 的虚拟内存。这对于许多应用程序来说可能是不够的,特别是那些需要处理大量数据或运行多个线程的应用程序。扩展虚拟内存到 3GB 可以解决此问题,并显着提高这些应用程序的性能。

扩展虚拟内存的步骤

要将 Win32 程序的虚拟内存扩展到 3GB,需要执行以下步骤:

  1. 禁用物理地址扩展 (PAE)

PAE 是一种硬件功能,允许 32 位处理器访问大于 4GB 的物理内存。要扩展虚拟内存,必须禁用 PAE。

  1. 启用 /3GB 开关

/3GB 开关是一个启动开关,用于将虚拟内存限制从 2GB 扩展到 3GB。要启用此开关,请执行以下操作:

  • 打开“命令提示符”窗口。
  • 键入以下命令:
bcdedit /set increaseuserva 3072
  • 重启计算机。
  1. 检查虚拟内存设置

在启用 /3GB 开关后,验证虚拟内存是否已成功扩展到 3GB:

  • 打开“控制面板”。
  • 转到“系统和安全”>“系统”。
  • 在左窗格中,单击“高级系统设置”。
  • 在“高级”选项卡上,在“性能”部分下,单击“设置”。
  • 在“性能选项”窗口的“高级”选项卡上,在“虚拟内存”部分下,单击“更改”。
  • 确保选中“自动管理所有驱动器的页面文件大小”复选框。
  • 单击“确定”保存更改。

示例

以下示例演示如何使用 /3GB 开关扩展 Win32 程序的虚拟内存:

代码

#include <windows.h>

int main() {
  // 分配 3GB 的虚拟内存
  void* p = VirtualAlloc(NULL, 3 * 1024 * 1024 * 1024, MEM_COMMIT, PAGE_READWRITE);

  // 使用分配的内存
  // ...

  // 释放分配的内存
  VirtualFree(p, 0, MEM_RELEASE);

  return 0;
}

执行

编译并运行代码后,将分配 3GB 的虚拟内存,用于程序使用。

限制

值得注意的是,扩展虚拟内存可能会对系统性能产生一些影响。此外,并非所有应用程序都支持使用超过 2GB 的虚拟内存。

结论

通过禁用 PAE 和启用 /3GB 开关,可以将 Win32 程序的虚拟内存扩展到 3GB。这为需要大量内存的应用程序提供了更多可用内存,并可以显着提高它们的性能。