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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top