Warum schlägt mein Programm gelegentlich fehl, wenn der Speicher voll ist, anstatt std :: bad_alloc zu werfen?

Ich habe ein Programm, das mehrere heuristische Suchalgorithmen und mehrere Domänen implementiert, um die verschiedenen Algorithmen experimentell auszuwerten. Das Programm ist in C ++ geschrieben, mit der GNU-Toolchain erstellt und läuft auf einem 64-Bit-Ubuntu-System. Wenn ich meine Experimente durchführe, benutze ich bashsulimit -Befehl zum Begrenzen des virtuellen Speichers, den der Prozess verwenden kann, damit mein Testsystem nicht mit dem Auslagern beginnt.

Bestimmte Kombinationen aus Algorithmus und Testinstanz haben die von mir festgelegte Speichergrenze erreicht. In den meisten Fällen gibt das Programm eine std :: bad_alloc-Ausnahme aus, die vom Standardhandler ausgegeben wird. Zu diesem Zeitpunkt wird das Programm beendet. Anstatt dies zu tun, schlägt das Programm gelegentlich einfach fehl.

Warum schlägt mein Programm gelegentlich fehl, wenn der Speicher voll ist, anstatt ein nicht behandeltes std :: bad_alloc zu melden und zu beenden?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage