En fait, si votre question est vraiment "j'ai cette triviale programme, est-il correct que je ne suis pas libre, quelques octets avant de sortir?", la réponse est oui, c'est bien. Sur tout système d'exploitation moderne qui va être très bien. Et le programme est triviale; elle n'est pas comme vous allez le mettre dans un stimulateur cardiaque ou de l'exécution du système de freinage d'une Toyota Camry avec cette chose. Si le seul client, c'est vous, alors la seule personne que vous pouvez éventuellement impact par être négligée, c'est vous.
Le problème vient ensuite, lorsque vous commencez à généraliser non négligeable de cas à partir de la réponse à cette question posée à propos d'un cas trivial.
Donc, nous allons plutôt poser deux questions à propos de certains non négligeable de cas.
J'ai une longue exécution d'un service qui alloue et désalloue la mémoire est un processus complexe, impliquant peut-être plusieurs allocateurs de frapper plusieurs tas. L'arrêt de mon service dans le mode normal, c'est long et compliqué processus qui consiste à s'assurer que extérieure de l'état -- fichiers, bases de données, etc-sont constamment fermées. Dois-je assurer que chaque octet de la mémoire que j'ai alloué est libéré avant que je m'arrête?
Oui, et je vais vous dire pourquoi. Une des pires choses qui puisse arriver à un long service en cours d'exécution est si par hasard des fuites de mémoire. Même de petites fuites peuvent s'ajouter à d'énormes fuites au fil du temps. Une norme technique pour la recherche et la correction de fuites de mémoire est à l'instrument, à la répartition des tas, de sorte que lors de l'arrêt, le temps qu'ils se connectent toutes les ressources qui ont été allouées sans être libérés. Sauf si vous aimez chasser vers le bas beaucoup de faux positifs et de dépenser beaucoup de temps dans le débogueur, toujours libre de votre mémoire , même si cela n'est pas à proprement parler nécessaire.
L'utilisateur est déjà en s'attendant à ce que, l'arrêt du service de down peut prendre des milliards de nanosecondes alors, qui se soucie si vous provoquer un peu de pression supplémentaire sur le virtuel allocateur de s'assurer que tout est nettoyé? C'est le prix à payer pour les gros logiciel compliqué. Et ce n'est pas comme vous êtes d'arrêter le service à tout moment, donc encore une fois, qui se soucie si ses quelques millisecondes plus lente que ce qu'elle pourrait être?
J'ai les même à long exécution d'un service. Si je détecte que l'un de mes internes des structures de données est corrompue, je souhaite "fail fast". Le programme est dans un état indéfini, il est probable qu'il exécute avec des privilèges élevés, et je vais supposer que, si je détecte l'état corrompu, c'est parce que mon service est activement attaqué par des partis hostiles. La chose la plus sûre à faire est d'arrêter immédiatement le service. J'ai plutôt de permettre aux attaquants de refuser le service à la clientèle plutôt que de risquer le service de rester debout et de ne pas compromettre mes utilisateurs de données plus loin. Dans cet arrêt d'urgence scénario dois-je faire en sorte que chaque octet de mémoire je alloué est libéré?
Bien sûr que non. Le système d'exploitation va prendre soin de cela pour vous. Si votre tas est corrompu, les attaquants peuvent en espérant que vous libérer de la mémoire dans le cadre de leur exploitation. Chaque milliseconde compte. Et pourquoi voulez-vous la peine à polir les poignées de porte et nettoyage de la cuisine avant de les déplacer d'une arme nucléaire tactique sur le bâtiment?
Donc la réponse à la question "dois-je libérer de la mémoire avant que mon programme s'arrête?" est: "ça dépend de ce que votre programme n'".