Ich führe ein C ++ - Programm in Ubuntu 10.04 (32-Bit-Systemarchitektur) aus. Wenn ich die Speicherkapazität berechne, die mein Programm verwendet, beläuft sich diese auf 800 MB. Ich habe einen 4GB RAM. Aber noch bevor das Programm beendet ist, gibt es eine Speicherausnahme. Warum passiert das? Liegt es an der Struktur des Speichers oder an Implementierungsproblemen oder was könnte dieses Problem möglicherweise auslösen? Ich habe dieses Problem schon einige Male gesehen, aber den Grund dafür nie verstanden. Hat jemand von euch diesen Fall schon einmal behandelt?
Aktualisieren:
Das Programm, das ich ausführen möchte, ist hier mit Erläuterungen. Um die Größe des von mir verwendeten Speichers zu erhöhen, erhöhe ich einfach den Wert max_i
in der Hauptfunktion.
ulimit
.Antworten:
Dinge, die schief gehen könnten:
Das System ist nicht in der Lage, Ihnen X Bytes kontinuierlichen Speicherplatz zuzuweisen. Nehmen wir an, Sie möchten einen Block mit 512 MB, aber das System kann einen so großen, zusammenhängenden Block nicht finden. Dann haben Sie Pech und bekommen eine "Out of Memory" -Ausnahme
Sie berechnen die Menge an Speicher falsch, die Ihr Programm tatsächlich benötigt. Geben Sie nicht verwendeten Speicher frei? Haben Sie den Overhead für einige Strukturen (Keyword Alignment) korrekt berechnet?
Haben Sie eine ausreichend große Auslagerungsdatei, damit das System andere Prozesse auslagern kann?
quelle
Wir brauchen mehr Informationen. Es scheint, als würden Sie ein Experiment durchführen, das cool ist, aber was macht das Programm tatsächlich?
Weisen Sie Tausende kleiner Speicherbereiche oder einige große fortlaufende Bereiche usw. zu?
Die Frage grenzt an Stackoverflow-Eignung IMO.
Wie die anderen Leute vermuten, befinden Sie sich in einer 32-Bit-Umgebung und Ihr Prozess könnte Probleme haben, einen großen Teil auf einmal zuzuweisen. Aber ich spekuliere nur ohne weitere Details.
quelle