Die Frage ist als "sprachunabhängig" gekennzeichnet, aber es ist schwierig, sie zu beantworten, ohne die Sprache und/oder das zugrunde liegende System zu berücksichtigen. (Ich sehe mehrere andere Hadns
Wenn die Speicherzuteilung implizit erfolgt und es keinen Mechanismus gibt, um festzustellen, ob eine bestimmte Zuteilung erfolgreich war oder nicht, kann es schwierig oder unmöglich sein, einen Zustand zu überwinden, in dem kein Speicher mehr vorhanden ist.
Wenn Sie zum Beispiel eine Funktion aufrufen, die versucht, ein großes Array zuzuordnen, definieren die meisten Sprachen einfach nicht das Verhalten, wenn das Array nicht zugeordnet werden kann. (In Ada führt dies zu einer Storage_Error
Ausnahme, zumindest im Prinzip, und es sollte möglich sein, dies zu handhaben).
Andererseits, wenn Sie einen Mechanismus haben, der versucht, Speicher zuzuweisen und in der Lage ist, einen Fehler zu melden (wie C's malloc()
oder C++'s new
), dann ist es sicherlich möglich, sich von diesem Misserfolg zu erholen. Zumindest in den Fällen von malloc()
y new
Eine fehlgeschlagene Zuweisung bewirkt nichts anderes als die Meldung eines Fehlers (sie beschädigt z. B. keine internen Datenstrukturen).
Ob der Versuch einer Wiederherstellung sinnvoll ist, hängt von der Anwendung ab. Wenn die Anwendung nach einem Zuweisungsfehler einfach nicht mehr erfolgreich sein kann, sollte sie alle möglichen Bereinigungen vornehmen und den Vorgang beenden. Wenn der Zuweisungsfehler jedoch nur bedeutet, dass eine bestimmte Aufgabe nicht ausgeführt werden kann, oder wenn die Aufgabe auch mit weniger Speicher langsamer ausgeführt werden kann, dann ist es sinnvoll, den Betrieb fortzusetzen.
Ein konkretes Beispiel: Angenommen, ich verwende einen Texteditor. Wenn ich versuche, eine Operation im Editor auszuführen, die viel Speicherplatz benötigt, und diese Operation nicht ausgeführt werden kann, möchte ich, dass der Editor mir mitteilt, dass er nicht tun kann, was ich verlangt habe und mich weiter bearbeiten lassen . Eine Beendigung, ohne meine Arbeit zu speichern, wäre eine inakzeptable Reaktion. Meine Arbeit zu speichern und abzubrechen wäre besser, ist aber immer noch unnötig benutzerfeindlich.