1

我在具有 6GB RAM 的 Windows 7 X64 上运行一个进程。当我想为此过程提交超过 2GB 的空间时,问题就出现了。我想使用 SetProcessWorkingSetSize() 但它没有效果。在大约 2040 MB 中仍然存在访问冲突,并且超过 30% 的 RAM 是空闲的。最奇怪的是,每次运行分配的内存量都是相同的。我的问题是我怎样才能在我的过程中使用超过这个值?我需要为这个过程充分利用 RAM。为了测试它,我写了一个简单的代码。如您所见,我并没有尝试分配一个大数组,在 while(1) 循环的每次迭代中,我只分配 640 个字节,并且访问冲突恰好发生在 2040MB 左右。

这是代码段:

class Dummy
{
    long double x;
    long double y;
    long double z;
    long double k;
    long double l;
    long double m;
    long double n;
    long double p;
};
int main()
{
    while(1){new Dummy[10];}
}

这是任务管理器的截图:

任务管理器

4

2 回答 2

4

您的程序以 32 位模式编译。因此,它只能使用这么多内存。这是架构限制。

如果您希望它能够使用更多内存,则必须以 64 位模式编译它。

于 2013-07-04T10:33:24.840 回答
3

或者您可以将选项 /LARGEADDRESSAWARE 设置为链接器,然后您的程序将可用大约 3GB RAM 并且仍然可以在 32 位系统上运行。

http://msdn.microsoft.com/en-us/library/wz223b1z(v=vs.80).aspx

于 2013-07-04T10:43:24.457 回答