我有一台配备 8 Gb RAM 的 Windows7 Maximal 64 位计算机。我在 MSVC 中创建了一个 Win32 控制台应用程序并编写如下:
size_t const s_chunkSize = 1024 * 32;
size_t total = 0;
for (;;)
{
if (!::malloc(s_chunkSize))
{
break;
}
total += s_chunkSize;
}
printf("total = %li", total);
// yes, I do not free allocated memory for simplicity
它输出 2111668224 低于 2Gb。如何强制我的程序分配超过 2Gb 的空间?我是否必须更改某些 MSVC 项目设置?还是我必须不使用 malloc
而是使用特定于 Windows 的函数?还是我必须以某种方式配置 Windows?
最佳答案
如评论中所述,您必须使用/LARGEADDRESSAWARE 链接器标志才能在提供虚拟地址空间的机器上启用 >2GB 的虚拟地址空间(通常是带有/3GB 标志的 32 位机器或 64 位机器)。请注意,这样做需要您在处理指针(http://blogs.msdn.com/b/oldnewthing/archive/2004/08/12/213468.aspx 和从那里链接的文章)时格外小心,并且无论如何都不允许您访问超过 4 GB 的虚拟地址空间。
更好的解决方案是构建一个 64 位版本的程序:您不再局限于 32 位地址空间,并且可以避免设置高位地址的警告。显然,缺点(除了可能出现的移植问题)是生成的可执行文件只能在 64 位机器上运行。
关于c++ - Windows 应用程序的堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20564221/