我有一个带有8 Gb RAM的Windows7 Maximal 64位计算机。我已经创造了一个MSVC Win32控制台aplication并写下如下:Windows应用程序的堆大小
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?
只需构建程序的x64版本。 Build +配置管理器。行动解决方案=新建,选择“x64”。 –
首先你是岸上你的总有效的64位变量? (在尝试打印块数而不是总内存大小之前,我已经看到一些没有64位算法的64位变量)。在64位操作系统上的第二个32位应用程序在仿真器(WOW)上运行,因此理论上限制应为4GB(〜3GB)。 – Spektre
@Spektre:仅当它们使用“大地址感知”链接器标志进行编译时,该标志是选择加入的。否则,出于兼容性原因,限制仍然是2 GB。 –