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

Réseau C Discussion :

Allocation mémoire et interruption de programme


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut Allocation mémoire et interruption de programme
    Hello,

    Supposons que j'ai un programme qui, dés qu'un malloc a échoué, quitte avec exit(1). Je me demandais simplement de ce que devenait la mémoire qui avait été alouée précédement?

    Faut-il libérer cette mémoire ou bien ca se fait automatiquement?

    Merci d'avance

  2. #2
    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
    Sur un système évolué, la mémoire appartient au processus, et est libéré quand le processus se termine.

    Sur des systèmes embarqués, ce n'est pas dit...
    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.

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    Ok donc sur un système non embarqué (type ordinateur linux/windows quelconque), la mémoire est bien libérée automatiquement ? Car si ce n'est pas le cas, il faudrait en quelque sorte stocker tous les pointeurs qui ont été alloué dans une sorte de variable globale (tableau) et les libérer lorsqu'on souhaite quitter le programme prématurément...

    J'ai du mal a comprendre, lorsqu'on fait un malloc, on a toujours insisté sur la necessité de faire un free sous peine de garder une portion de mémoire réservée pour rien une fois le programme terminé... Or, que l'on quitte un programe prématurément ou qu'il se termine normalement, il me semble que ces deux situations sont équivalentes, et que donc si on doit absolument libérer la mémoire lorsque le programme se termine normalement, il semble logique qu'il faille aussi la libérer lorsqu'on le quitte prématurément...

    Y aurait-il quelque chose qui m'échappe?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par vinzzzz Voir le message
    Y aurait-il quelque chose qui m'échappe?
    Cela fait partie d'une bonne habitude de programmation à savoir, libérer ce qu'on a alloué !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    Oui bien sur... Mais si je dois libérer ma mémoire lorsque je quitte un programme brutalement, ca nécéssite tout de même de mettre en place une structure adaptée pour faire ca... Tandis que si elle est automatiquement libérée, on peut s'en passer.

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par vinzzzz Voir le message
    Oui bien sur... Mais si je dois libérer ma mémoire lorsque je quitte un programme brutalement, ca nécéssite tout de même de mettre en place une structure adaptée pour faire ca... Tandis que si elle est automatiquement libérée, on peut s'en passer.
    Ce n'est peut-être pas le cas pour tous les systèmes, surtout si tu donnes dans la portabilité, je pense que c'est un point à prendre en considération !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par vinzzzz Voir le message
    Oui bien sur... Mais si je dois libérer ma mémoire lorsque je quitte un programme brutalement, ca nécéssite tout de même de mettre en place une structure adaptée pour faire ca... Tandis que si elle est automatiquement libérée, on peut s'en passer.
    En théorie, et pour du code 'jetable', oui.

    Mais dans l'industrie, le code validé, ça coûte cher. Quand on écrit un nouveau programme, on cherche à réutiliser ce qui a été fait précédemment, et si on écrit du code nouveau, on cherche à ce qu'il soit réutilisable. Donc on travaille avec des 'briques' logicielles autonomes qui ont leur propres 'constructeurs'/'destructeurs' gérant proprement et efficacement la mémoire. Les détails ne sont pas visibles de l'utilisateur, mais ils doivent être conçus et codés correctement, car on ne sait pas d'avance quelles seront les conditions d'utilisation.

    Théorie : http://emmanuel-delahaye.developpez.com/tad.htm
    Réalité : http://emmanuel-delahaye.developpez.com/clib.htm

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/08/2008, 05h16
  2. Limite Allocation Mémoire d'un tableau d'entier
    Par l9ft b9hind dans le forum C++
    Réponses: 5
    Dernier message: 27/10/2005, 19h29
  3. Allocation mémoire
    Par DestyNov@ dans le forum C++
    Réponses: 9
    Dernier message: 23/08/2005, 08h09
  4. [Pointeur] Allocation mémoire
    Par Rayek dans le forum Langage
    Réponses: 22
    Dernier message: 20/05/2005, 10h26
  5. Allocation mémoire dynamique
    Par ITISAR dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2005, 09h59

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