Gibt Ubuntu beim Beenden des Programms automatisch den von einem C-Programm zugewiesenen Speicher frei?


11

Ich habe ein C-Programm geschrieben, das Code enthält, der Speicher mit der malloc()Funktion zuweist. Wenn ich den Speicher mit dieser free()Funktion nicht freigebe, gibt Ubuntu ihn dann automatisch frei?


Es hat nichts mit Ubuntu zu tun, der Verantwortung seines Kernels.
Benutzer

@user: Eine bestimmte Version von Ubuntu muss auf einer der Versionen des Linux-Kernels ausgeführt werden. Es hat also etwas mit Ubuntu zu tun, um zu wissen, ob der Kernel, auf dem es ausgeführt wird, den Speicher automatisch freigibt oder nicht.
Ashubuntu

Antworten:


15

Ja.

Der Kernel gibt nach Beendigung des Programms alle von einem Programm zugewiesenen Ressourcen frei.

Dies erfolgt, nachdem die in do_exit()definierte Funktion kernel/exit.cihre Ausführung beendet hat; Die do_exit()Funktionsausführung selbst kann durch eine Reihe von Ereignissen ausgelöst werden, am häufigsten durch einen expliziten exit()Systemaufruf, der vom Programm während seiner regulären Berechnung exit()aufgerufen wird, oder durch einen impliziten Systemaufruf, der vom Programm bei seiner Beendigung aufgerufen wird (da der C-Compiler einen exit()Systemaufruf nach main()s setzt Rückkehr). Andere Gründe sind der Empfang eines nicht handhabbaren / nicht ignorierbaren Signals oder einer Ausnahme.

Die do_exit()Funktion selbst führt eine Reihe von Aufgaben aus. Nachdem die Ausführung beendet wurde, werden die zugewiesenen Ressourcen des Programms vom Kernel freigegeben und zur weiteren Verwendung an das System zurückgegeben.

Quelle


7
Aber das ist natürlich keine Entschuldigung dafür, das Freie () zu "vergessen" ...
Hagen von Eitzen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.