Voici un petit programme qui réserve et libère de la mémoire, pour vérifier donc 8-)
Dans tous les cas l'appel à la commande free renvoie "quasiment rien de libre" sur toute machine Linux ayant tourné plus d'1/2 journée. La politique de Linux est d'utiliser un max de ram pour le cache, pour "si jamais l'appli redemandait de la mémoire" etc. Rien de très surprenant à ce que Bash continue à faire semblant d'avoir besoin de 100 megs, je soupçonne que mon petit programme fasse pareil.
A sauver dans "mem.c", lancer avec "gcc mem.c -o mem && ./mem"
Je pense que ce vrai-faux problème de memory leak n'en est pas un, et que c'est tout bêtement lié à la façon dont le noyau gère la mémoire.
[^] # Re: fuite un jour, fuite toujours
Posté par ufoot . En réponse à la dépêche Nouvelle version majeure de bash. Évalué à 4.
Dans tous les cas l'appel à la commande free renvoie "quasiment rien de libre" sur toute machine Linux ayant tourné plus d'1/2 journée. La politique de Linux est d'utiliser un max de ram pour le cache, pour "si jamais l'appli redemandait de la mémoire" etc. Rien de très surprenant à ce que Bash continue à faire semblant d'avoir besoin de 100 megs, je soupçonne que mon petit programme fasse pareil.
A sauver dans "mem.c", lancer avec "gcc mem.c -o mem && ./mem"
Je pense que ce vrai-faux problème de memory leak n'en est pas un, et que c'est tout bêtement lié à la façon dont le noyau gère la mémoire.
-------------8<----------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#define N 10
#define S 10000000
void *my_malloc(int n)
{
void *ptr;
printf("Allocating %d bytes\n",S);
ptr=malloc(n);
if (ptr)
{
((char *) ptr)[0]=' ';
((char *) ptr)[n-1]=' ';
sleep(3);
}
else
{
printf("Failed...\n");
}
return ptr;
}
void my_free(void *ptr)
{
if (ptr)
{
printf("Freeing memory\n");
free(ptr);
}
}
int main(int argc, char *argv[])
{
void *ptr[N];
int i;
for (i=0; i<N;++i)
{
ptr[i]=my_malloc(S);
}
for (i=0;i<N;++i)
{
my_free(ptr[i]);
}
sleep(30);
return(0);
}
-------------8<----------------------------------------------------------------------