Si j'ai programmé - sans le savoir - une fuite de mémoire et que l'application se termine, la mémoire qui a fui est-elle libérée?
c++
memory-leaks
Martijn Courteaux
la source
la source
Réponses:
Oui, une «fuite de mémoire» est simplement de la mémoire à laquelle un processus n'a plus de référence et ne peut donc plus libérer. Le système d'exploitation garde toujours une trace de toute la mémoire allouée à un processus et la libère lorsque ce processus se termine.
Dans la grande majorité des cas, le système d'exploitation libérera 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 en temps réel la mémoire peut ne pas être libérée lorsque le programme est terminé.
la source
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 gère qui ne sont pas fermées explicitement, mais cela n'est pas garanti par la norme C ++. Vous pouvez trouver un périphérique intégré qui ne libère pas vos fuites de mémoire.
Cela étant dit, Windows et toutes les distributions de Linux que j'ai jamais vues libèrent des fuites de mémoire.
Vous pouvez facilement créer une énorme boucle de fuites de mémoire pour le tester vous-même. Regardez votre utilisation de RAM augmenter, puis fermez votre programme. Vous verrez que l'utilisation de la RAM diminue.
Une autre considération 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 également d'autres effets secondaires si vos destructeurs ne sont pas appelés.
la source
Utilisez-vous un système d'exploitation de bureau (Windows, Linux, etc.)? Si tel est le cas, oui, en général, le système libère toute mémoire associée au programme lorsque le programme se termine.
la source
Généralement 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 gardent toujours un décompte de références et le suppriment lorsque tous les programmes qui l'ont ouvert se terminent, mais quelques-uns ne le font pas (par exemple, Windows 16 bits avait quelques types d'éléments qui resteraient alloués même si rien n'y faisait référence - bien que il s'est généralement écrasé pour d'autres raisons avant que cela ne se soit accumulé pour causer un problème ...)
la source
Autant que je sache, un système d'exploitation moderne libérera cette mémoire une fois le programme terminé.
la source
Cela dépend de la mémoire que vous avez divulguée. Une partie de la mémoire ne peut pas être récupérée par le système d'exploitation. Cependant, la plupart de la mémoire de la plupart des systèmes d'exploitation sera automatiquement récupérée à la fin du processus.
la source