c ++中的大型动态数组

Moo*_*min 0 c++ memory dynamic overflow

短问题:

#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;
}
Run Code Online (Sandbox Code Playgroud)

有2GB的RAM(在32位操作系统上)我不能使它工作,L_size = 3000这是非常明显的,因为它需要大约.2.4GB.

但是,当我开始上述程序的2个副本时,每个程序都L_size = 1500有效 - 真的很慢,但最后两个都allocated在控制台中返回.所以问题是 - 这怎么可能?它与虚拟内存有关吗?

在一个程序中,可以将一个大数组存储在虚拟内存中,同时在另一个上运行吗?

谢谢.

Ree*_*sey 7

是.操作系统允许您为每个进程分配最多2GB的RAM.当你启动两个副本时,它将使用虚拟内存增长,这将非常非常慢(因为它使用硬盘驱动器),但仍然起作用.