简短问题:
#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。
但是,当我用L_size = 1500
开始上述程序的2个副本时,它可以正常运行 - 但是最终都会在控制台中返回allocated
。
所以问题是 - 这怎么可能?它与虚拟内存有关吗?
在一个程序中,可以将一个大数组存储在虚拟内存中,同时在另一个程序中运行吗?
THX。
答案 0 :(得分:7)
是。操作系统允许您为每个进程分配最多2GB的RAM。当你启动两个副本时,它将使用虚拟内存增长,这将非常非常慢(因为它正在使用硬盘驱动器),但仍然可以正常运行。
答案 1 :(得分:1)
是的,它是虚拟内存。使用L_size = 1500,您可以启动第一个实例,它将能够分配所需的内存。当您启动第二个实例时,第一个实例分配的内存被分页到磁盘,为第二个实例在RAM中腾出空间。
您可以在任何时间和任何一个进程中分配的RAM量不仅取决于您可用的物理RAM和虚拟内存量(页面文件大小),还取决于内存地址的宽度。在64位计算机上,您将能够在单个进程中分配比在32位计算机上更多的内存。