Ho scritto un programma C contenente codice che alloca memoria usando la malloc()
funzione. Se non libero la memoria usando la free()
funzione, Ubuntu la rilascerà automaticamente?
Ho scritto un programma C contenente codice che alloca memoria usando la malloc()
funzione. Se non libero la memoria usando la free()
funzione, Ubuntu la rilascerà automaticamente?
Risposte:
Sì.
Il kernel rilascerà tutte le risorse allocate da un programma al termine del programma.
Ciò avviene dopo che la do_exit()
funzione definita in kernel/exit.c
ha terminato la sua esecuzione; l' do_exit()
esecuzione della funzione stessa potrebbe essere innescato da una serie di eventi, più comunemente da un esplicito exit()
syscall chiamato dal programma durante il calcolo regolare o da un implicito exit()
syscall chiamato dal programma sulla sua terminazione (come il compilatore C pone uno exit()
syscall dopo main()
's ritorno). Altre ragioni includono la ricezione di un segnale o un'eccezione non gestibile / non ignorabile.
La do_exit()
stessa funzione esegue una serie di attività. Dopo che ha terminato la sua esecuzione, le risorse allocate del programma vengono rilasciate dal kernel e restituite al sistema per ulteriori usi.