Question

Problème court:

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

avec 2 Go de RAM (sur un système d’exploitation 32 bits), je ne peux pas le faire fonctionner avec L_size = 3000 , ce qui est assez évident car il faudrait environ. 2,4 Go.

Mais quand je lance 2 copies du programme ci-dessus, chacune avec L_size = 1500 , cela fonctionne - très lentement mais finalement, les deux renvoient alloué dans la console. La question est donc: comment est-ce possible? Est-ce lié à la mémoire virtuelle?

Il est possible d’avoir un grand tableau stocké dans la mémoire virtuelle tout en fonctionnant sur un autre - au sein d’un programme?

Thx.

Était-ce utile?

La solution

Oui. Le système d'exploitation vous permettra d'allouer jusqu'à 2 Go de RAM par processus. Lorsque vous démarrez deux copies, cela laissera croître la mémoire virtuelle, ce qui sera très lent (car le disque dur est utilisé), mais fonctionne toujours.

Autres conseils

Oui, c'est de la mémoire virtuelle. Avec L_size = 1500, vous pouvez démarrer la première instance et ce dernier pourra allouer la mémoire requise. Lorsque vous démarrez la deuxième instance, la mémoire allouée par la première instance est renvoyée vers le disque, ce qui laisse de la place dans la RAM pour la deuxième instance.

La quantité de RAM que vous pouvez allouer à la fois et au cours d’un processus dépend non seulement de la quantité de RAM physique et de mémoire virtuelle (taille du fichier de page) disponible, mais également de la largeur de vos adresses de mémoire. Sur un ordinateur 64 bits, vous pourrez allouer beaucoup plus de mémoire dans un processus unique que sur un ordinateur 32 bits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top