• [^] # Re: Vraiment fin de programme

    Posté par . En réponse au message free() or not free() ?. Évalué à 2.

    autre cas pratique:

    dans le main, j ai une double boucle for qui appelle une sous routine.

    La sous routine fait elle meme une double boucle for apres avoir alloue plusieur des tableaux assez grands.

    La routine alloue environ 4 tableaux de dimention variables ( des tableaux de 1 a 3D de taille totalement dynamique ) ... un enfer a allouer, et c est pire a desalouer.

    Chaque for tourne environ 1000 tours. donc le main appelle 1000000 la sous routine. Laroutine alloue des tableaux de 1 a 10M. T imagine su je me gourre dans mes free ?

    un free de trop, mal place, soit je libere un truc pas encore alloue, soit je libere une ressource dont je pourrai avoir besoin plus loin. Si je ne fait pas de free du tout, mon main appel 1000000 fois la sous routine qui alloue minimum 1Mo a chaque appel ... si je libere pas du tout, il me faudrait 1To de RAM ...

    Donc meme si tout est libere apres execution, le truc risque de swapper plusieur jours ... dans la limite de la swap disponible ... et j ai deja 3Go de swap sur mes 350Go de disque.

    Avec des free bien places, le tout s execute a peu pres bien avec un pic de consommation a environ 150Mo de RAM.

    Enfin 150M, c est quand je manipule des images non compressees de 10Mo a la base. J ai en stoque une image de 80Mo ... elle j ai peur ... je crois que je vais jamais la traiter :)

    ( et je ne travailles qu en 8 bits per pixel).

    Mais je vais tester de virer les free, je pense que ca va swapper severe avant meme de finire la premiere etape du traitement :)