• [^] # Re: fuite un jour, fuite toujours

    Posté par . En réponse à la dépêche Nouvelle version majeure de bash. Évalué à 4.

    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.

    -------------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<----------------------------------------------------------------------