Une fuite de mémoire est-elle libérée lorsque le programme se ferme?

Si j’ai programmé – sans le savoir – une fuite de mémoire, et que l’application se termine, la fuite de mémoire est-elle libérée?

Oui, une “fuite de mémoire” est simplement une mémoire à laquelle un processus n’a plus de référence et ne peut donc plus être libre. Le système d’exploitation conserve toujours la trace de toute la mémoire allouée à un processus et le libère lorsque ce processus se termine.

Dans la grande majorité des cas, le système d’exploitation libère de la mémoire – comme c’est le cas avec les «saveurs» normales de Windows, Linux, Solaris, etc. Cependant, il est important de noter que dans des environnements spécialisés tels que divers systèmes d’exploitation temps réel la mémoire ne peut pas être libérée lorsque le programme est terminé.

Le système d’exploitation exécutant votre programme nettoie généralement la mémoire qui n’est pas libérée explicitement et les descripteurs qui ne sont pas fermés explicitement, mais cela n’est pas garanti par la norme C ++. Vous pouvez trouver des périphériques intégrés qui ne libèrent pas vos memory leaks.

Cela étant dit, Windows et toutes les dissortingbutions de Linux que j’ai déjà vues libèrent des memory leaks.

Vous pouvez facilement créer une énorme boucle de memory leaks pour la tester vous-même. Surveillez votre utilisation de la RAM et fermez votre programme. Vous verrez que l’utilisation de la RAM est redescendue.


Une autre considération à prendre en compte lors de l’utilisation de C ++ est que si vous ne supprimez pas la mémoire allouée au tas, vos destructeurs ne sont pas non plus appelés. Parfois, vous aurez aussi d’autres effets secondaires si vos destructeurs ne sont pas appelés.

Est-ce que vous utilisez un OS de bureau (Windows, Linux, etc.)? Si oui, oui, en général, le système libère la mémoire associée au programme lorsque le programme est terminé.

Habituellement, oui. Certains systèmes prennent en charge des éléments tels que les blocs de mémoire partagée qui ne sont pas automatiquement libérés lorsqu’un programme se termine. La plupart conservent toujours un compte de référence et le suppriment lorsque tous les programmes qui l’ouvrent se terminent, mais certains ne le font pas (par exemple, Windows 16 bits contenait quelques types d’éléments qui restraient alloués même si rien ne s’y référait). il est généralement tombé en panne pour d’autres raisons avant que cela ne s’accumule pour causer un problème …)

Dépend de quelle mémoire vous avez fui. Une certaine mémoire ne peut pas être récupérée par le système d’exploitation. La plupart de la mémoire sur la plupart des systèmes d’exploitation sera automatiquement récupérée lorsque le processus se termine.

Autant que je sache, un système d’exploitation moderne libérera cette mémoire une fois le programme terminé.