Une fuite de mémoire libérée lorsque le programme s'arrête?
Si j'ai programmé — sans le savoir — une fuite de mémoire, et l'application se termine, est la perte de mémoire libérée?
- Très très utile, liées réponse: unix.stackexchange.com/questions/275184/...
Vous devez vous connecter pour publier un commentaire.
Oui, une "fuite de mémoire" est tout simplement de la mémoire qu'un processus n'a plus de référence, et donc ne peut plus libre. Le système d'exploitation conserve une trace de toute la mémoire allouée à un processus, et de le libérer lorsque le processus se termine.
Dans la grande majorité des cas, le système d'exploitation libre de la mémoire - comme c'est le cas avec la normale "saveurs" de Windows, Linux, Solaris, etc. Toutefois, il est important de noter que dans des environnements spécialisés, tels que les différents Systèmes d'Exploitation Temps Réel la mémoire ne peut pas être libéré lorsque le programme est terminé.
Le système d'exploitation de l'exécution de votre programme n'est généralement le nettoyage de la mémoire qui n'est pas libéré explicitement et les poignées qui ne sont pas fermées de manière explicite, mais ce n'est pas garanti par la norme C++. Vous pouvez trouver certains des périphériques intégrés qui ne sont pas libre de vos fuites de mémoire.
Que dit Windows et toutes les distributions de Linux que j'ai jamais vu faire libérer des fuites de mémoire.
Vous pouvez facilement créer une énorme boucle de fuites de mémoire mais de le tester vous-même. Surveillez votre utilisation de la RAM grandir et puis fermez votre programme. Vous verrez que l'utilisation de la RAM remonte vers le bas.
Une autre considération lors de l'utilisation de C++, c'est que si vous n'êtes pas la suppression de votre segment de mémoire allouée, alors votre destructeurs sont également de ne pas être appelé. Parfois, vous aurez d'autres effets secondaires ainsi si votre destructeurs ne sont pas appelés.
Êtes-vous en cours d'exécution sur un ordinateur de bureau du système d'exploitation (Windows, Linux, etc.)? Si donc, oui, en général, le système va libérer la mémoire associée avec le programme lorsque le programme se termine.
Normalement, oui. Certains systèmes de soutien des choses comme la mémoire partagée des blocs qui ne sont pas automatiquement libéré lorsqu'un programme se termine bien. La plupart de toujours garder un nombre de références et de les supprimer lorsque tous les programmes qui l'a ouvert à la sortie, mais un peu de ne pas l'être (par exemple, Windows 16 bits eu quelques types de points qui restent alloués, même si rien ne visées à eux, même si c'habituellement s'est écrasé pour des raisons autres avant qu'assez de cette accumulation de causer un problème...)
Dépend de ce mémoire que vous avez une fuite. La mémoire ne peut pas être récupérée par le système d'exploitation. Plus de mémoire sur la plupart des Systèmes d'exploitation cependant sera automatiquement récupéré lorsque le processus s'arrête.
Autant que je sache, un système d'exploitation moderne permettra de libérer cette mémoire une fois que le programme se termine.