题
短的问题:
#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;
}
用的RAM(在32位操作系统),2GB我不能使它与L_size = 3000
这是很明显的,因为它会需要大约工作。 2.4GB。
但是,当我启动上述程序的2份每L_size = 1500
它的作品 - 很慢,但最后都返回控制台allocated
。
所以,问题是 - 这怎么可能?这是否与虚拟存储器?
是可能的具有存储在虚拟存储器中的一个大的阵列,而在另一个操作 - 在一个程序中
THX。
解决方案
是。操作系统将允许您分配高达2GB的每个进程的RAM。当您启动两个副本,这将让这个成长使用虚拟内存,这将是非常,非常慢(因为它使用的硬盘驱动器),但仍然起作用。
其他提示
是,这是虚拟内存。随着L_size = 1500,你就可以开始第一个实例,这将是能够分配所需的内存。当您启动第二个实例,经初审分配的内存调出到磁盘,使得在RAM空间,第二个实例。
的RAM可以在任何一个时间,在任何一个工序分配的量不仅取决于物理RAM和虚拟存储器(页文件大小)有可用的量,而且还对您的存储器地址的宽度。在64位机器上,你将能够在一个单一的过程分配更多的内存比你将能够在32位机器上。
不隶属于 StackOverflow