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?
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?
Antworten:
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.c
ihre 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.