problème court:Grand tableau dynamique en C++
#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 OS 32 bits) Je ne peux pas le faire fonctionner avec L_size = 3000
ce qui est assez évidente car il faudrait environ. 2,4 Go.
Mais quand je commence 2 copies du programme ci-dessus chacun avec L_size = 1500
cela fonctionne - vraiment lent mais finalement à la fois renvoie allocated
dans la console. Donc la question est - 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 opérant sur un autre - dans un programme?
Thx.
Je m'attendrais à ce qu'il soit très lié à la capacité du système d'exploitation à échanger la mémoire inactive (c'est-à-dire une application suspendue (dans les termes préemptifs multi-tâches) et à en échanger une autre. – Lazarus
Est-ce sur un système d'exploitation 32 bits ou sur un système d'exploitation 64 bits? – sbi
En note, vous n'allouez pas "un grand tableau", mais L_size + 1 R_size arrays. Vous vous heurtez probablement à la limitation de mémoire adressable pour le système d'exploitation 32 bits. – mch