Вопрос

Короткая проблема:

#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;
}

с 2 ГБ оперативной памяти (на 32-разрядной ОС) я не могу заставить его работать с L_size = 3000 что довольно очевидно, поскольку для этого потребовалось бы ок.2,4 ГБ.

Но когда я запускаю 2 копии вышеупомянутой программы, каждая с L_size = 1500 это работает - очень медленно, но в конце концов оба возврата allocated в консоли.Итак, вопрос в том, как это возможно?Связано ли это с виртуальной памятью?

Возможно ли хранить один большой массив в виртуальной памяти во время работы с другим - в рамках одной программы?

Спасибо.

Это было полезно?

Решение

ДА.Операционная система позволит вам выделять до 2 ГБ оперативной памяти на каждый процесс.Когда вы запустите две копии, это позволит увеличить объем виртуальной памяти, которая будет очень, очень медленной (поскольку используется жесткий диск), но все равно будет функционировать.

Другие советы

Да, это виртуальная память.Используя L_size = 1500, вы можете запустить первый экземпляр, и он сможет выделить необходимую память.Когда вы запускаете второй экземпляр, память, выделенная первым экземпляром, выгружается на диск, освобождая место в оперативной памяти для второго экземпляра.

Объем оперативной памяти, который вы можете выделить в любой момент времени и в любом процессе, зависит не только от объема доступной физической оперативной и виртуальной памяти (размер файла подкачки), но также от ширины ваших адресов памяти.На 64-разрядной машине вы сможете выделить гораздо больше памяти за один процесс, чем на 32-разрядной машине.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top