我正在尝试创建一个用于测试的 Windows 8 32 位程序。测试包括大量分配,我遇到了麻烦。操作系统是用 /3GB 启动的,机器有 8GB 和一个页面文件,程序是用 链接的/LARGEADDRESSAWARE
,所以我不应该受到内存限制。(对我来说使用 32 位程序进行测试很重要,因为某些类型的定义方式 - 例如, a size_t
)。
问题是我无法从new
or分配 2GB (0x80000000) 的内存VirtualAlloc
。new
抛出bad_alloc
并VirtualAlloc
返回. NULL
_ERROR_NOT_ENOUGH_MEMORY
在以前的 Windows 版本中,3GB 地址空间意味着应用程序被赋予 0x00000000 到 0xBFFFFFFF,操作系统使用 0xC0000000 到 0xFFFFFFFF(参见 Richter 的Programming Applications for Windows或 Solomon 和 Russinovich 的Windows Internals)。原则上,我相信这意味着我有理论空间。
如果我切换到 x64,一切都会按预期工作。我怀疑我遗漏了一些非常明显的东西,但我不确定是什么(比如地址空间中间的共享内存区域)。
有什么想法可以在 32 位机器上执行 0x80000000 的分配吗?