Domanda

Problema breve:

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

con 2 GB di RAM (su sistemi operativi a 32 bit) Non riesco a farlo funzionare con L_size = 3000 che è abbastanza ovvio poiché avrebbe bisogno di ca. 2.4GB.

Ma quando avvio 2 copie del programma precedente ognuna con L_size = 1500 funziona - molto lentamente ma alla fine entrambi restituiscono allocato nella console. Quindi la domanda è: come è possibile? È legato alla memoria virtuale?

È possibile avere un array di grandi dimensioni memorizzato nella memoria virtuale mentre si opera su un altro - all'interno di un programma?

Thx.

È stato utile?

Soluzione

Sì. Il sistema operativo ti consentirà di allocare fino a 2 GB di RAM per processo. Quando avvii due copie, questo crescerà usando la memoria virtuale, che sarà molto, molto lenta (dal momento che sta usando il disco rigido), ma funzionerà comunque.

Altri suggerimenti

Sì, è memoria virtuale. Con L_size = 1500, è possibile avviare la prima istanza e sarà in grado di allocare la memoria richiesta. Quando si avvia la seconda istanza, la memoria allocata dalla prima istanza viene trasferita su disco, creando spazio nella RAM per la seconda istanza.

La quantità di RAM che è possibile allocare in qualsiasi momento e in ogni processo dipende non solo dalla quantità di RAM fisica e memoria virtuale (dimensioni del file di paging) disponibili, ma anche dalla larghezza degli indirizzi di memoria. Su una macchina a 64 bit, sarai in grado di allocare molta più memoria in un singolo processo rispetto a una macchina a 32 bit.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top