Pregunta

Problema corto:

#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 2GB de RAM (en SO de 32 bits) No puedo hacer que funcione con L_size = 3000 que es bastante obvio ya que necesitaría aprox. 2.4GB.

Pero cuando comienzo 2 copias del programa anterior, cada una con L_size = 1500 funciona, realmente lento pero finalmente ambos devuelven asignado en la consola. Entonces la pregunta es: ¿cómo es eso posible? ¿Está relacionado con la memoria virtual?

¿Es posible tener una gran matriz almacenada en la memoria virtual mientras se opera en otro, dentro de un programa?

Thx.

¿Fue útil?

Solución

Sí El sistema operativo le permitirá asignar hasta 2 GB de RAM por proceso. Cuando comience dos copias, permitirá que esto crezca usando memoria virtual, que será muy, muy lenta (ya que está usando el disco duro), pero seguirá funcionando.

Otros consejos

Sí, es memoria virtual. Con L_size = 1500, puede iniciar la primera instancia y podrá asignar la memoria requerida. Cuando inicia la segunda instancia, la memoria asignada por la primera instancia se pagina en el disco, dejando espacio en la RAM para la segunda instancia.

La cantidad de RAM que puede asignar en cualquier momento y en cualquier proceso depende no solo de la cantidad de RAM física y memoria virtual (tamaño de archivo de página) que tiene disponible, sino también del ancho de sus direcciones de memoria. En una máquina de 64 bits, podrá asignar mucha más memoria en un solo proceso de la que podría en una máquina de 32 bits.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top