我在带有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];}
}
以下是任务管理器的屏幕截图:
答案 0 :(得分:4)
您的程序以32位模式编译。因此,它只能使用如此多的内存。这是架构限制。
如果您希望它能够使用更多内存,则必须以64位模式进行编译。
答案 1 :(得分:3)
或者您可以将选项/ LARGEADDRESSAWARE设置为链接器,然后您的程序将可用于3GB RAM,并且仍然可以在32位系统上运行。
http://msdn.microsoft.com/en-us/library/wz223b1z(v=vs.80).aspx