短的问题:

#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位机器上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top