【发布时间】:2013-12-13 10:30:56
【问题描述】:
我有一台具有 8 Gb RAM 的 Windows7 最大 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?
【问题讨论】:
-
只编译x64版本的程序。构建 + 配置管理器。操作解决方案 = 新建,选择“x64”。
-
首先你支持你的总数是有效的64位变量吗? (在尝试打印块数而不是总内存大小之前,我已经看到了一些没有 64 位算术的 64 位变量)。 64 位操作系统上的第二个 32 位应用程序在模拟器 (WOW) 上运行,因此理论上限制应该是 4GB (~3GB)。
-
@Spektre:仅当它们使用“大地址感知”链接器标志编译时,该标志是可选的。否则,出于兼容性原因,限制仍为 2 GB。
-
您的打印语句将仅打印
total的低 32 位。应该是%Iu。 -
@Matteo Italia 获取信息...我不是 MSVC++ 用户...更喜欢 Borland/Embarcadero IDE/编译器
标签: c++ windows visual-c++ malloc