Windows应用程序的堆大小

时间:2013-12-13 10:30:56

标签: c++ windows visual-c++ malloc

我有一台装有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

输出低于2Gb的2111668224。如何强制我的程序分配更多的2Gb?我是否必须更改某些MSVC项目设置?或者我是否必须使用malloc而不是Windows特定的功能?或者我必须以某种方式配置Windows?

1 个答案:

答案 0 :(得分:3)

如评论中所述,您必须使用/ LARGEADDRESSAWARE链接器标志在提供它的计算机上启用> 2GB的虚拟地址空间(通常是具有/ 3GB标志或64位计算机的32位计算机) 。请注意,这样做需要您在处理指针(http://blogs.msdn.com/b/oldnewthing/archive/2004/08/12/213468.aspx和从那里链接的文章)时要格外小心,并且不允许您访问超过4 GB的虚拟地址空间。

更好的解决方案是构建程序的64位版本:您不再局限于32位地址空间,并且避免使用高位设置的地址警告。显然,缺点(除了可能出现的移植问题)是生成的可执行文件只能在64位计算机上运行。