不管在 32 位 Windows 上还是在 64 位 Windows 上,32 位的应用程序都只能使用最大 2GB 的内存,这是我们司空见惯的一个设定。但其实 Windows 提供了一些方法让我们打破这样的设定,使程序使用大于 2GB 的内存。
阅读本文,你将了解:
1. 为什么 32 位程序只能使用最大 2GB 内存;
1. 让 32 位程序使用大于 2GB 内存的两种方法;
1. 声明支持大于 2GB 内存后,能使用多少内存。
为什么 32 位程序只能使用最大 2GB 内存?
32 位寻址空间只有 4GB 大小,于是 32 位应用程序进程最大只能用到 4GB 的内存。然而,除了应用程序本身要用内存,操作系统内核也需要使用。应用程序使用的内存空间分为用户空间和内核空间,每个 32 位程序的用户空间可独享前 2GB 空间(指针值为正数),而内核空间为所有进程共享 2GB 空间(指针值为负数)。所以,32 位应用程序实际能够访问的内存地址空间最多只有 2GB。
让 32 位程序使用大于 2GB 内存的两种方法
editbin
这是 Visual Studio 2017 采用的做法。我们需要使用到两个工具——editbin
和 dumpbin
。前者用于编辑我们编译生成好的程序使之头信息中声明支持大于 2GB 内存,后者用于查看程序的头信息验证我们是否改好了。
编辑一个程序使之声明支持大于 2GB 内存的命令是: