2017-12-04 1 views
1

Ich habe eine Schleife erstellt, um zu versuchen, nicht genügend Arbeitsspeicher zu haben. Hier ist der komische Teil. Wenn ich es so laufen, es funktioniert wie erwartet und das RAM frisst, und geht über 1gb in Sekunden .:Beim Erstellen einer Schleife neuer Zeiger erhöht die Ausgabe des dereferenzierten Zeigers nicht die Speicherauslastung.

while(true){ 
    int *pointer66 = new int; 
} 

Allerdings, wenn ich ein cout wie folgt hinzufügen, RAM-Nutzung konsistent bleibt (es erhöht langsam Geck an der Konsole die Ausgabe der Aufnahme, was, aber das ist es, in den wenigen Megabyte aufhalten):

while(true){ 
    int *pointer66 = new int; 
    cout << *pointer66; 
} 

Was ist los? Es scheint, als ob der Cout das Speicherleck verhindert? Ich verwende Visual Studio 2005.

Antwort

2

Ihre Annahme ist falsch - std :: cout kann Speicherverlust nicht verhindern. Der Grund könnte sein, dass bei der Konsolenausgabe Ihr Zyklus um Größenordnungen langsamer läuft als ohne ihn. Sie können versuchen, die Ausgabezeit der Konsole zu messen und versuchen, die resultierenden ausführbaren Dateien zu zerlegen und herauszufinden, dass in beiden Fällen der Speicher tatsächlich zugewiesen ist.

+0

Eigentlich habe ich gerade festgestellt, dass Sie Recht haben. Der Speicher wird zugewiesen, aber die Konsolenausgabe verlangsamt ihn stark. Je mehr Zeug auf der Konsole ausgegeben wird, desto langsamer wird die Ausführung der Schleife. Danke! –

Verwandte Themen