如何更改进程可以分配的最大内存(每次在2040 MB左右获取访问冲突)

时间:2013-07-04 10:31:01

标签: c++ c memory-management window limit

我在带有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];}
}

以下是任务管理器的屏幕截图:

Task Manager

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

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