Große dynamische Array in C ++
Frage
Kurz Problem:
#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;
}
mit 2 GB RAM (auf 32-Bit-OS) Ich kann es nicht mit L_size = 3000
machen arbeiten, die ziemlich offensichtlich ist, da es ca. benötigen würde. 2.4GB.
Aber wenn ich 2 Kopien von oben Programm starten jeweils mit L_size = 1500
funktioniert es - wirklich langsam, aber schließlich beide kehrt allocated
in der Konsole.
Die Frage ist also - wie ist das möglich? Ist es in dem virtuellen Speicher zu tun?
Es ist möglich, ein großes Array im virtuellen Speicher gespeichert haben, während auf einem anderen Betrieb - innerhalb eines Programms
Thx.
Lösung
Ja. Das Betriebssystem ermöglicht es Ihnen, bis zu 2 GB RAM pro Prozess zuzuteilen up. Wenn Sie zwei Kopien starten, wird es lassen Sie diese mit Hilfe des virtuellen Speichers wachsen, das wird sehr, sehr langsam (da es die Festplatte verwendet wird), aber immer noch funktionieren.
Andere Tipps
Ja, es ist die virtuelle Speicher. Mit L_size = 1500, können Sie die erste Instanz starten, und es wird den erforderlichen Speicher zuweisen kann. Wenn Sie die zweite Instanz zu starten, wird der Speicher von der ersten Instanz zugewiesen Platte ausgelagert, im RAM für die zweite Instanz macht Platz.
Die Menge an RAM Sie zu jeder Zeit und in einem Prozess zuordnen können, hängt nicht nur von der Menge der physischen RAM und virtuellen Speicher (Auslagerungsdateigröße), die Sie zur Verfügung haben, sondern auch auf der Breite des Speicheradresse. Auf einer 64-Bit-Maschine, werden Sie in der Lage sein, viel mehr Speicher in einem einzigen Prozess zugeordnet wird, als Sie auf einer Maschine 32-Bit-fähig sein würden.