一般情况下,32 位程序的内存大小被限制在了 2G,不过可以通过以下的操作来突破这个限制。

修改操作系统参数

这一步骤只针对 32 位操作系统,64 位操作系统可以跳过

  1. 用管理员权限打开一个命令行窗口

  2. 执行 bcdedit.exe /set pae forceenable

使系统可以识别大于 4G 的内存

  1. 执行 bcdedit.exe /set increaseuserva 3072

使用户态内存大小从原来的 2G 增加到 3G

  1. 重启电脑

修改 32 位程序属性(headers)

  1. 用管理员权限打开一个命令行窗口

  2. 执行 editbin.exe /largeaddressaware <your_application>.exe

这样,这个修改过的 32 位程序就可以使用超过 2G 的系统内存了。


注意:

  1. editbin.exe 一般位于 Visual Studio 的安装目录中,比如在 Visual Studio 2010 的目录下: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\editbin.exe

  2. 执行完 editbin.exe 之后,最好再使用 dumpbin.exe 来验证修改是否生效

a. 命令行执行: dumpbin.exe /headers <your_application>.exe | more

b. 在程序的输出中,如果可以看到 Application can handle large (>2GB) addresses, 则说明修改已经生效

  1. 虽然程序修改之后可以使用的内存总数超过了 2G,但是每次申请内存的大小限制还是 2G,所以如果程序中尝试一次性申请大于 2G 的内存,还是会失败,不过一般也不会有一个 32 位的程序会一次性申请这么大的内存。