Sollte ich mir die Mühe erkennen OOM (out of memory) Fehler in meinem C-code?

Habe ich gewidmet, eine große Anzahl von Zeilen C-code cleanup-Etiketten/Bedingungen für fehlgeschlagene memory allocation (angedeutet durch die alloc Familie zurückkehren NULL). Ich wurde gelehrt, dass dies war eine gute übung, so dass auf die memory-Fehler, wird eine entsprechende Fehler-status konnte markiert werden und der Anrufer könnte möglicherweise dazu führen "anmutig Speicher bereinigen" und "wiederholen". Ich habe jetzt einige Zweifel über diese Philosophie, dass ich bin der Hoffnung, zu klären.

Ich denke, es ist möglich, dass ein Anrufer könnte deallocate übermäßige Pufferspeicher oder strip-relationale Objekte Ihrer Daten, aber finde ich das der Anrufer nur selten die Möglichkeit hat, (oder ist auf der entsprechenden Ebene der Abstraktion) zu tun. Auch, frühen Rückkehr aus der aufgerufenen Funktion ohne Nebenwirkungen ist oft nicht trivial.

Ich auch gerade entdeckt, das Linux OOM-killer, der scheint, um diese Bemühungen völlig sinnlos auf meine primäre Entwicklungs-Plattform.

Linux standardmäßig folgt ein
optimistisch memory-allocation-Strategie.
Dies bedeutet, dass beim malloc() gibt
nicht-NULL-es gibt keine Garantie, dass
der Speicher wirklich verfügbar ist.
Das ist ein wirklich schlechter Fehler. Falls es
stellt sich heraus, dass das system aus
Speicher, einen oder mehrere Prozesse
werden getötet von der berüchtigten OOM
killer.

Ich vermute, es gibt wahrscheinlich auch andere Plattformen gibt, die nach dem gleichen Prinzip. Ist es etwas pragmatisch, das macht die überprüfung für die OOM Bedingungen lohnt?

InformationsquelleAutor cdleary | 2009-04-18
Schreibe einen Kommentar