小问题:
#include <iostream>
using namespace std;
int main()
{
double **T;
long int L_size;
long int R_size = 100000;
long int i,j;
cout << "enter L_size:";
cin >> L_size;
cin.clear();
cin.ignore(100,'\n');
cout << L_size*R_size << endl;
cout << sizeof(double)*L_size*R_size << endl;
T = new double *[L_size];
for (i=0;i<L_size;i++)
{
T[i] = new double[R_size];
}
cout << "press enter to fill array" << endl;
getchar();
for (i=0;i<L_size;i++)
{
for (j=0;j<R_size;j++)
{
T[i][j] = 10.0;
}
}
cout << "allocated" << endl;
for (i=0;i<L_size;i++)
{
delete[] T[i];
}
delete [] T;
cout << "press enter to close" << endl;
getchar();
return 0;
}
使用 2GB RAM(在 32 位操作系统上)我无法使用 L_size = 3000
这很明显,因为它需要大约。 2.4GB。
但是当我启动上述程序的 2 个拷贝时,每个拷贝都使用 L_size = 1500
它工作 - 非常慢但最终都在控制台中返回 allocated
。
所以问题是——这怎么可能?跟虚拟内存有关系吗?
有可能在一个程序中将一个大数组存储在虚拟内存中同时对另一个数组进行操作吗?
谢谢。
最佳答案
是的。操作系统将允许您为每个进程分配最多 2GB 的 RAM。当您启动两个拷贝时,它会使用虚拟内存让它增长,这将非常非常慢(因为它使用硬盘驱动器),但仍然可以运行。
关于c++ - C++中的大型动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1650942/