一般情况下,32 位程序的内存大小被限制在了 2G,不过可以通过以下的操作来突破这个限制。
修改操作系统参数
这一步骤只针对 32 位操作系统,64 位操作系统可以跳过
用管理员权限打开一个命令行窗口
执行 bcdedit.exe /set pae forceenable
使系统可以识别大于 4G 的内存
- 执行 bcdedit.exe /set increaseuserva 3072
使用户态内存大小从原来的 2G 增加到 3G
- 重启电脑
修改 32 位程序属性(headers)
用管理员权限打开一个命令行窗口
执行 editbin.exe /largeaddressaware <your_application>.exe
这样,这个修改过的 32 位程序就可以使用超过 2G 的系统内存了。
注意:
editbin.exe 一般位于 Visual Studio 的安装目录中,比如在 Visual Studio 2010 的目录下: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\editbin.exe
执行完 editbin.exe 之后,最好再使用 dumpbin.exe 来验证修改是否生效
a. 命令行执行: dumpbin.exe /headers <your_application>.exe | more
b. 在程序的输出中,如果可以看到 Application can handle large (>2GB) addresses, 则说明修改已经生效
- 虽然程序修改之后可以使用的内存总数超过了 2G,但是每次申请内存的大小限制还是 2G,所以如果程序中尝试一次性申请大于 2G 的内存,还是会失败,不过一般也不会有一个 32 位的程序会一次性申请这么大的内存。