79 Stimmen

Ist "Speicherplatzmangel" ein behebbarer Fehler?

Ich programmiere schon sehr lange, und die Programme, die ich sehe, wenn ihnen der Speicher ausgeht, versuchen aufzuräumen und sich zu beenden, d.h. sie scheitern mit Anstand. Ich kann mich nicht erinnern, wann ich das letzte Mal gesehen habe, dass ein Programm tatsächlich versucht hat, sich zu erholen und normal weiterzuarbeiten.

Ein so großer Teil der Verarbeitung hängt davon ab, dass Speicher erfolgreich zugewiesen werden kann, insbesondere in Sprachen mit Garbage-Collector, dass Fehler außerhalb des Speichers als nicht wiederherstellbar eingestuft werden sollten. (Zu den nicht wiederherstellbaren Fehlern gehören Dinge wie Stapelüberläufe.)

Welches zwingende Argument spricht dafür, dass es sich um einen anfechtbaren Fehler handelt?

0voto

Prof. Falken Punkte 23108

UClibc hat einen internen statischen Puffer von etwa 8 Byte für Datei-E/A, wenn kein weiterer Speicher dynamisch zugewiesen werden muss.

0voto

Raedwald Punkte 43209

Welches zwingende Argument spricht dafür, dass es sich um einen anfechtbaren Fehler handelt?

In Java, ein überzeugendes Argument für no ein behebbarer Fehler ist, weil Java es erlaubt, OOM zu signalisieren, wenn jede Zeit, und zwar auch dann, wenn Ihr Programm dadurch in einen inkonsistenten Zustand geraten könnte. Eine zuverlässige Wiederherstellung aus einem OOM ist daher unmöglich; wenn Sie die OOM-Ausnahme abfangen, können Sie nicht verlassen Sie sich auf auf einen Ihrer Programmstände. Siehe Garantiert kein Auslösen von VirtualMachineError

-1voto

nos Punkte 214143

Ich habe das hier:

void *smalloc(size_t size) {
  void *mem = null; 
  for(;;) {
   mem = malloc(size);
   if(mem == NULL) {
    sleep(1);
   } else 
     break;
  }
  return mem;
}

Das hat schon ein paar Mal ein System gerettet. Nur weil Sie jetzt keinen Speicher mehr haben, heißt das nicht, dass ein anderer Teil des Systems oder andere Prozesse, die auf dem System laufen, noch Speicher haben, den sie bald zurückgeben werden. Seien Sie lieber sehr vorsichtig, bevor Sie solche Tricks versuchen, und haben Sie die volle Kontrolle über jeden Speicher, den Sie in Ihrem Programm zuweisen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X