我正在尝试在 Windows 7 Professional 下分配一大块 (5GB) 内存。我有一台 64 位机器和 16GB RAM,我使用的是 MS Visual Studio 10。对于那些可能会问为什么的人 - 这是因为我需要保存一个二维栅格表示,将参考数字映射到多边形数据,地图最多可以有 40,000 x 40,000 个单位。这必须进入 RAM 并将其分割成更小的块在运行时成本太高。
所以如果我这样做:
int _tmain(int argc, _TCHAR* argv[])
{
int t = INT_MAX;
int * test = new int[t/6];
delete test;
return 0;
}
对 new 的调用失败,但
int * test = new int[t/7];
成功。
再调查一下,我发现内存分配仅使用资源监视器指定为“空闲”的内存。因此,当这小于请求的分配时,分配失败。资源监视器告诉我(当我查看时)我有大约 5GB 正在使用,大约 10GB 处于待机状态,还有超过 1GB 的空闲空间。
据我了解,这不应该发生。当然,如果请求内存,它应该从备用内存中取出吗?如果不是这种情况,那么有没有办法从 C++ 内部减少 Windows 使用的备用内存量?
后者可以使用 RAMMap 在 C++ 之外完成,正如我从这篇文章中发现的那样:以编程方式清除 Windows 7 备用内存,但不幸的是,对于编程清除的问题没有有用的答案。也许我在 C++ 中比较幸运。
当然,更有可能的情况是我错过了一些明显的东西。
谢谢