Ubuntu libère-t-il automatiquement la mémoire allouée par un programme C à la fin du programme?


11

J'ai écrit un programme C contenant du code allouant de la mémoire à l'aide de la malloc()fonction. Si je ne libère pas la mémoire à l'aide de la free()fonction, Ubuntu la libérera-t-elle automatiquement?


Cela n'a rien à voir avec Ubuntu, la responsabilité de son noyau.
utilisateur

@user: une version particulière d'Ubuntu doit s'exécuter sur l'une des versions du noyau Linux. Il a donc quelque chose à voir avec Ubuntu afin de savoir si le noyau sur lequel il s'exécute libère la mémoire automatiquement ou non.
ashubuntu

Réponses:


16

Oui.

Le noyau libérera toutes les ressources allouées par un programme à la fin du programme.

Cela se fait après que la do_exit()fonction définie dans kernel/exit.ca terminé son exécution; l' do_exit()exécution de la fonction elle-même peut être déclenchée par un certain nombre d'événements, le plus souvent par un exit()appel système explicite appelé par le programme lors de son calcul régulier ou par un exit()appel système implicite appelé par le programme à sa fin (car le compilateur C place un exit()appel système après main()le s revenir). D'autres raisons incluent la réception d'un signal ou d'une exception impossible à gérer / non ignorable.

La do_exit()fonction elle-même effectue un certain nombre de tâches. Une fois son exécution terminée, les ressources allouées au programme sont libérées par le noyau et renvoyées au système pour d'autres utilisations.

La source


7
Mais ce n'est bien sûr pas une excuse pour "oublier" le gratuit () ...
Hagen von Eitzen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.