Ubuntu rilascia automaticamente la memoria allocata da un programma C al termine del programma?


11

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?


Non ha nulla a che fare con Ubuntu, la responsabilità del suo kernel.
utente

@utente: una particolare versione di Ubuntu deve essere eseguita su una delle versioni del kernel Linux. Quindi ha qualcosa a che fare con Ubuntu in modo da sapere se il kernel su cui è in esecuzione rilascia automaticamente o meno la memoria.
Ashubuntu,

Risposte:


16

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.cha 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.

fonte


7
Ma questa ovviamente non è una scusa per "dimenticare" il libero () ...
Hagen von Eitzen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.