IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

desalloué la mémoire alloué à un tab


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Par défaut desalloué la mémoire alloué à un tab
    bonjour,

    voilà j'ai ce petit bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char buff[2];
    sprintf(buff,"%d",rand()%2 + 1);
    il marche bien, mais comment libérer la mémoire alloué à buff?

    (car j'ai des requêtes qui vont à chaque fois passer par ses deux lignes, donc mont buff sera à chaque fois sollicité et allouera 2 octets . donc après 1 millions de requêtes... je veux à chaque requêtes, libérer la mémoire de buff.

    j'ai besoin de votre aide pour comprendre comment le faire.

    cdt

  2. #2
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    Si ton tableau est déclaré comme ça (on dit qu'il est déclaré en statique), l'espace est alloué sur la pile, et la libération de la mémoire sera libérée à la fin de la fonction en cours (voir la durée de vie des variables en C).

    Tant que tu n'alloue pas la mémoire dynamiquement avec l'opérateur malloc, tu n'as pas à la libérer manuellement non plus.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Par défaut
    Merci beaucoup

    donc je n'ai pas à me soucier de la libération de l'espace alloué sur la pile, elle est libéré par la fonction.

    chouette, c'est exactement ce que j'attendais.

    Mille merci

  4. #4
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Par défaut
    Citation Envoyé par fisherpric Voir le message
    donc je n'ai pas à me soucier de la libération de l'espace alloué sur la pile, elle est libéré par la fonction.
    Juste une petite rectification, le buf ne sera pas libéré par la fonction mais libéré à la fin de la fonction.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par haraelendil Voir le message
    Si ton tableau est déclaré comme ça (on dit qu'il est déclaré en statique), l'espace est alloué sur la pile, et la libération de la mémoire sera libérée à la fin de la fonction en cours (voir la durée de vie des variables en C).
    Petit lapsus: tu as décrit ici le comportement d'une variable automatique (déclaration par défaut de toute variable)
    Si la variable est déclarée en "static", alors elle dure tout le long du programme et son contenu est conservé quand on quitte la fonction et peut être récupéré si on y revient

    Accessoirement, on (même moi) parlons généralement de comportement dans la fonction ce qui est un abus de langage car en réalité ce comportement se passe dans le bloc d'instructions dans lequel est définit/déclaré la variable...

    Citation Envoyé par fisherpric Voir le message
    Merci beaucoup

    donc je n'ai pas à me soucier de la libération de l'espace alloué sur la pile, elle est libéré par la fonction.

    chouette, c'est exactement ce que j'attendais.

    Mille merci
    Exact. Toutefois, si ta fonction est appelée, comme tu le sous-entends, un très grand nombre de fois, tu aurais peut-être avantage à déclarer ton tableau en "static".
    Le tableau sera alloué une seule fois pour tout le programme et ça évitera au proc le dur travail d'allouer/libérer la mémoire à chaque appel de fonction...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    ^Le processeur fait déjà des opérations sur le pointeur de pile s'il faut sauvegarder certains registres. Déplacer le tableau en mémoire statique risque plus de provoquer du swap supplémentaire qu'autre chose...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quelle est la taille de la mémoire allouée à la JVM ?
    Par emie31 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/11/2006, 21h42
  2. Réponses: 5
    Dernier message: 08/11/2006, 11h41
  3. mémoire allouée ?
    Par _yeye_ dans le forum C++
    Réponses: 18
    Dernier message: 30/03/2006, 14h35
  4. Libérer la mémoire allouée à un objet
    Par boudou dans le forum Langage
    Réponses: 6
    Dernier message: 21/02/2006, 22h25
  5. [JVM & tomcat] Modifier la mémoire allouée
    Par sylvain_neus dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 22/06/2004, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo