malloc() est une fonction en espace utilisateur, ca n'alloue pas de memoire directement. La fonction qui alloue de la memoire c'est brk(). brk() est une fonction du noyau qui etends le segment de donnee. Quand un processus meurt, le systeme desalloue tous les segments de ton processus, y comprisle segment de donnee. C'est basiquement comme ca pour toutes les ressources dont par exemple les descripteurs de fichiers. Les descripteurs viennent du noyau donc il sait ce qui est ouvert et ce qui ne l'est pas. Et il fait le menage a la fin du processus.
note que tu peux avoir plus d'un segment de donnee et que brk() n'est pas la seule fonction qui fait de l'allocation de memoire (mmap() peut faire ca aussi). Mais encore une fois le principe est le meme, c'est le systeme qui alloue la ressource pour commencer, donc il sait comment la fermer.
Note que dans le cas de malloc(), un appel a malloc ne correpond pas a un appel a brk(). brk() est seulement appeller de temps en temps pour augmenter significativement l'espace memoire, la plupart du temps, malloc utilise un bout de memoire qui a ete alloue par le systeme dans un appel anterieur a malloc.
NB: linux ne fait que de l'allocation de memoire virtuelle quand tu appelle malloc() ou brk() ou mmap() ou whatever(). La memoire physique n'est actuellement alloue que lorsque la memoire est lue ou ecrite pour la premiere fois.
NB2: la memoire est desalloue, mais si tu as des objets a deconstruire proprement, il disparaisse a la mort du processus. Donc si tu as des traitements a faire a la destruction d'objet, il faut voir si le langage supporte leur liberation (typiquement en C++, tous les objet alloues dynamiquement ne seront pas detruit, juste desalloue).
NB3: ne pas desallouer la memoire, ca fait pleurer les bebes chats.