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.
Antworten:
Ja.
Der Kernel gibt nach Beendigung des Programms alle von einem Programm zugewiesenen Ressourcen frei.
Dies erfolgt, nachdem die in
do_exit()
definierte Funktionkernel/exit.c
ihre Ausführung beendet hat; Diedo_exit()
Funktionsausführung selbst kann durch eine Reihe von Ereignissen ausgelöst werden, am häufigsten durch einen explizitenexit()
Systemaufruf, der vom Programm während seiner regulären Berechnungexit()
aufgerufen wird, oder durch einen impliziten Systemaufruf, der vom Programm bei seiner Beendigung aufgerufen wird (da der C-Compiler einenexit()
Systemaufruf nachmain()
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
quelle