
Envoyé par
cinemania
d'ailleurs Windows ne libère la mémoire allouée par une application automatiquement en fin de processus, que dans des cas bien précis...
n'oublie pas que tous les OS ne fonctionnent pas de la même façon.
il n'y a encore pas si longtemps, Windows ne libérait pas du tout la mémoire allouée sur le tas par une application quand elle quittait si elle ne le faisait pas elle même, et comme déjà dit il ne le fait que dans des cas précis.
sous Windows tu peux allouer de la mémoire avec malloc/realloc/free et bien entendu en C++... new/delete... ces fonctions utilisent les fonctions de la libc... quand tu alloue de la mémoire avec ces méthodes, elle est nettoyée en fin de process. (si aucune règle spécifique de compilation de ton application n'a pas perturbé ce fonctionnement)
mais tu peux appeler l'api Windows et allouer de la mémoire via les méthodes api, et là ce n'est plus la même histoire... dans ce cas la mémoire n'est libérée que si et seulement si tu fait de l'allocation temporaire en utilisant l'api pour la mémoire temporaire, ce que personne ne fait et utilise toujours l'api d'allocation globale.
la libc utilise l'allocation temporaire depuis les systèmes récents, mais utilisait l'allocation globale, il n'y a pas si longtemps que ca. (d'ailleurs si tu règle mal ton compilateur, tu peux perturber ce fonctionnement et faire en sorte que ce soit la méthode globale plutôt que "temporaire" qui soit utilisée.)
se baser uniquement sur le système pour nettoyer derrière toi prouve une seule et unique chose... que tu es un mauvais développeur et d'une fainéantise coupable. tu as probablement acquis cette mauvaise habitude auprès de langages sur plateforme managé comme Java ou C#, mais toute ressource réclamée doit être libérée par celui qui l'a appelé, et ce même sous linux... c'est un fondement de la programmation propre !
maintenant je reconnais qu'on peut en oublier parfois, même en faisant attention, et qu'effectivement c'est mieux qu'une sécurité de l'OS fasse le ménage, mais ce n'est pas une raison pour du coup ne pas le faire soit même ! en plus ce comportement ressemble à s'y méprendre à un développeur java, qui de toute façon ne permet pas une libération déterministe de la mémoire, malheureusement en temps que développeur tu devrais savoir qu'il est parfois indispensable de libérer la mémoire qu'on a allouée... certains algorithmes nécessites une libération déterministe sous peine de se faire killé par le système parce qu'on est trop gourmand.
d'ailleurs tu ne t'ai jamais demandé pourquoi certains fichiers n'étaient jamais refermés correctement ? pourquoi alors que plus rien ne les ouvre, le système t'envoie littéralement pêtre si tu veux les effacer, les déplacer ?
tout simplement parce que l'application qui à ouverte le fichier n'a pas libérée proprement la ressource, et là ouverte par des méthodes qui interdise au système de le fermer de lui même...
et oui Windows est plein de contrariétés et souvent parce que les développeurs ne savent pas développer, et non pas parce que l'OS est mal conçut ou mal pensé.
tu aimerais que des passants passent devant chez toi et foute toute leurs merdes dans ton jardin ? et quand tu va leur dire, oh vous pourriez ramasser... pfff on s'en fou, la mairie passe derrière nous, ou vous passerez bien derrière nous !
tu crois réellement que tu apprécierais ce genre de comportement ? et bien c'est exactement la même chose pour la mémoire que tu alloue sur un système, ou toute ressource, quelle qu'elle soit... la moindre des choses est de faire le ménage derrière soit, à moins qu'on ne soit un gros "porc" qui aime se vautrer dans la fange...
je trouve ce comportement de plus en plus répandu chez les développeurs (à cause de cette sécurité sur linux et de la libération non déterministe de java) particulièrement irritant, et vraiment insensé.
je comprend mieux pourquoi je peste après certaines appli qui bouffent des 100aine de méga en mémoire, alors qu'elles ne font rien d'exceptionnel...avec des développeurs aussi feignants que toi... ca ne peut pas aller en s'améliorant.
Partager