A mon avis, les arguments précédents (responsabilisation du programmeur, propreté du codage, extensibilité de l'application) sont parfaitement valables, mais il convient de prendre aussi en compte le problème de l'efficacité.
Je n'ai pas fait de tests à ce sujet, ni été regarder le code Linux sur ce chapitre, mais je sais que le noyau 2.4, et certainement aussi le 2.6, alloue de la mémoire de façon contigue (zut, je n'ai pas de tréma, désolé...) au programme appelant, dans une zone préréservée à cet effet, du coup, la libération du fait du noyau se résumera à libérer cette zone, ce qui ira vite (en fait, comme cette zone a été réservée de toutes façons, le noyau devra forcément la libérer à la fin de l'exécution du processus), en revanche, si on libère les zones explicitement, on rajoute inutilement du code.
Bon, évidemment, on pourra me répondre que la terminaison d'un processus n'est généralement pas le moment où l'on a besoin d'un maximum de performances, puisque justement, la tâche est achevée, mais j'ai connu un cas contraire (un processus effectuait un fork(), le fils faisait une tâche complexe, puis revenait, et le père exploitait le résultat).
Bref, pour moi, si tu cherches des performances, évite ces free().
# Rapidité
Posté par CoinKoin . En réponse au message free() or not free() ?. Évalué à 1.
Je n'ai pas fait de tests à ce sujet, ni été regarder le code Linux sur ce chapitre, mais je sais que le noyau 2.4, et certainement aussi le 2.6, alloue de la mémoire de façon contigue (zut, je n'ai pas de tréma, désolé...) au programme appelant, dans une zone préréservée à cet effet, du coup, la libération du fait du noyau se résumera à libérer cette zone, ce qui ira vite (en fait, comme cette zone a été réservée de toutes façons, le noyau devra forcément la libérer à la fin de l'exécution du processus), en revanche, si on libère les zones explicitement, on rajoute inutilement du code.
Bon, évidemment, on pourra me répondre que la terminaison d'un processus n'est généralement pas le moment où l'on a besoin d'un maximum de performances, puisque justement, la tâche est achevée, mais j'ai connu un cas contraire (un processus effectuait un fork(), le fils faisait une tâche complexe, puis revenait, et le père exploitait le résultat).
Bref, pour moi, si tu cherches des performances, évite ces free().