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 :

les conséquences de malloc


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 171
    Par défaut les conséquences de malloc
    Bonjour,
    voilà je programme en C et je voudrais savoir si dans un programme C
    on utilise malloc mais sans faire de free dans le même programme (je veux dire sans liberer de la mémoire) est-ce que celà a des conséquence ?
    les quelles ?
    merci.

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Si tu utilises malloc sans faire de free alors tu peux te retrouver saturé à un instant. Remarque un vrai programmeur ne fait jamais de malloc sans faire de free derrière.

    Une bonne pratique est que dés que tu poses le mot malloc tu mets tout de suite derrière le free pour ne pas oublier.

    C'est donc une erreur de programmation que de ne pas libérer la mémoire soit -2 pour chaque free n'ont réalisé

  3. #3
    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
    Normalement et je dit bien normalement, le système sous-jacent de ton OS devrais s'occuper de la libération des ressources mais j'en suis pas sûr qu'ils le font tous

    Vu que je ne fait confiance qu'à moi même, la règle d'or est donc:

    1 *alloc = 1 free
    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 !

  4. #4
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 171
    Par défaut
    La mémoire utilisée par malloc est la mémoire vive ou mémoire du disque dur ?

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par momeftah
    La mémoire utilisée par malloc est la mémoire vive ou mémoire du disque dur ?
    En mémoire vive tu t'imagines le temps d'accès aux disques

  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
    Mais une allocation de mémoire avec les fonctions *alloc ca se fait dans le tas donc dans la RAM et jamais sur disque
    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 confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    En mémoire vive tu t'imagines le temps d'accès aux disques
    En fait non, tu demandes au système à ce qu'il t'alloue de la mémoire, tu ne sais pas d'où elle provient, de plus, si tu n'as pas assez de RAM, le système va chercher la mémoire sur le disque.

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par PRomu@ld
    En fait non, tu demandes au système à ce qu'il t'alloue de la mémoire, tu ne sais pas d'où elle provient, de plus, si tu n'as pas assez de RAM, le système va chercher la mémoire sur le disque.

    Pour moi elle provient forcément de la RAM pour la mémoire du disque tu fais peut etre référence au swapping ?

  9. #9
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Pour moi elle provient forcément de la RAM
    En fait tu demandes l'allocation d'un bloc de mémoire, celui ci peut être en RAM ou sur le disque. Si tu demande l'allocation d'un giga et que ta machine ne dispose pas de cette quantité en RAM, le système utilise le disque (le SWAP si tu veux).

  10. #10
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Je ne suis pas totalement d'accord avec ta remarque. Si tu demandes 1 GIGA le système te donnera 1GIGA virtuel mais cela n'est ni en RAM ni sur disque

    Lorsqu'un programme accéde à une variable d'un programme cette dernière est forcément remontée en RAM et n'est normalement plus sur disque même si à un instant elle pouvait y être.

    Si je veux faire une incrémentation sur une variable i et que j'alloue cette dernière avec malloc alors qu'il n'y a plus de RAM disponible alors le système fera de la place et fera un swapping de ce qu'il lui semble correct pour réaliser l'opération ensuite on a le schéma : ram->registre processeur(incrémentation)->ram

  11. #11
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 171
    Par défaut
    Citation Envoyé par PRomu@ld
    En fait tu demandes l'allocation d'un bloc de mémoire, celui ci peut être en RAM ou sur le disque. Si tu demande l'allocation d'un giga et que ta machine ne dispose pas de cette quantité en RAM, le système utilise le disque (le SWAP si tu veux).
    si par exemple j'utilise la mémoire SWAP pour manque de mémoire vive alors cette mémoire SWAP ne va pas être liberée si je n'utilise pas de free dans mon programme ?
    Et donc ça va bouffer de la mémoire du disque?

  12. #12
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    si par exemple j'utilise la mémoire SWAP pour manque de mémoire vive alors cette mémoire SWAP ne va pas être liberée si je n'utilise pas de free dans mon programme ?
    Et donc ça va bouffer de la mémoire du disque?
    De toute manière le swap sur les système est soit un fichier soit une partition. De manière parfaite, si le système est bien conçu, le swap sur fichier devrait se faire sur un fichier de taille fixe et là tu ne verrai rien. Il se trouve que ça n'est pas toujours le cas, le fichier d'échange a quelques fois une taille dynamique. Si le système en plus ne s'occupe pas de libérer la mémoire à la fin de l'exécution de ton programme tu vas donc avoir un espace disque inutilisable pour rien (jusqu'au prochain redémarrage).

    De toute façon, en programmation il faut être rigoureux et ne pas se reposer sur des supputations hazardeuses : comme Franck.H l'a dit : 1 alloc = 1 free. Toute autre chose est (de mon point de vue) une erreur de programmation. De plus, il se peut qu'au court de ton programme une partie de la mémoire que tu as alloué ne te soie plus nécéssaire, si cette zone est relativement grande, il vaut mieux la libérer pour éviter de swapper (et tout le mécanisme qu'a cité hegros).

    Si tu demandes 1 GIGA le système te donnera 1GIGA virtuel mais cela n'est ni en RAM ni sur disque
    C'est pas ce que j'ai dis ?

    En fait je me rend compte que nous ne parlons pas de la même chose, je répondait plus à cette question :

    La mémoire utilisée par malloc est la mémoire vive ou mémoire du disque dur ?

  13. #13
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par PRomu@ld
    En fait tu demandes l'allocation d'un bloc de mémoire, celui ci peut être en RAM ou sur le disque. Si tu demande l'allocation d'un giga et que ta machine ne dispose pas de cette quantité en RAM, le système utilise le disque (le SWAP si tu veux).

    Sous unix (je parle d'unix car je ne sais pas vraiment comment fonctionne windows là dessus). Lorsque tu crées un processus, le système va faire une demande pour le mettre sur le disque, mais se retrouve normalement en mémoire vive grace au buffer cache. Et c'est toute la partie Buffer Cache qui s'occupe de ça, c'est transparent pour tout le monde (il y a en gros des primitives getBlock et releaseBlock qui permet de récuperer de l'espace, qui se trouvera soit en RAM, soit sur le disque, le buffer cache aura tendance à garder en mémoire les blocs les plus utilisées (comme les processus...) et les derniers utilisés (suivant la loi de proximité spatiale et temporelle, et il y a d'autres techniques plus fines)

  14. #14
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par momeftah
    si par exemple j'utilise la mémoire SWAP pour manque de mémoire vive alors cette mémoire SWAP ne va pas être liberée si je n'utilise pas de free dans mon programme ?
    Et donc ça va bouffer de la mémoire du disque?
    Il faut libérer la mémoire que tu alloues qu'elle soit physique ou virtuelle car la "purge" ou "ramasse miette" après ca dépend des systèmes.

  15. #15
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 171
    Par défaut
    maintenant je comprends pour quoi mon pc plante au démarrage en mode console au lieu du mode graphique; je crois que c'est du à ça !!
    mon système ne s'occupe pas de liberer de la mémoire après éxecution d'un porgramme.
    Que-ce que vous pensez ?

  16. #16
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    C'est quoi ton système ? Et ne me dis pas MS...qui se trouve ici

  17. #17
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par momeftah
    maintenant je comprends pour quoi mon pc plante au démarrage en mode console au lieu du mode graphique; je crois que c'est du à ça !!
    mon système ne s'occupe pas de liberer de la mémoire après éxecution d'un porgramme.
    Que-ce que vous pensez ?
    Une fois le processus terminé, le système détruit complétement le processus, donc tu recupères toute la mémoire qu'il a pu demandé (encore heureux d'ailleurs)

  18. #18
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par millie
    Une fois le processus terminé, le système détruit complétement le processus, donc tu recupères toute la mémoire qu'il a pu demandé (encore heureux d'ailleurs)

    mmmm je sais pas trop... Mes constatations sous W**** ne vont pas trop dans ce sens-là.. Mais je n'y connais rien, juste un utilisateur.. Sous unixoide oui c'est vrai....

    Mais tu peux arriver à faire planter un système unixoide quand même en demandant plus de mémoire que RAM et swap (petit à petit), et en gérant pas les retours d'alloc (par exemple dans une boucle)... Tu auras "disk full" répété... Et plus rien à faire... Reboot...

    Mas bon, vu les tailles en général, ça pose pas de problème. Par contre, historiquement, il me semble que au moins jusqu'à Win98, M$ ne gérait pas de swap et tout se passait en RAM (d'où les innombrables (et parfaitement clairs pour l'utilisateur lambda ) "Fatal Error %x007FFF" où il n'y avait pkus qu'à éteindre et rebooter)..

  19. #19
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par souviron34
    Mais tu peux arriver à faire planter un système unixoide quand même en demandant plus de mémoire que RAM et swap (petit à petit), et en gérant pas les retours d'alloc (par exemple dans une boucle)... Tu auras "disk full" répété... Et plus rien à faire... Reboot...
    C'est pour ça que j'ai dit : Une fois le processus terminé. Si il termine pas, alors c'est sûr, ça peut tellement ramer que tu peux ne pas réussir à l'arrêter Sinon, je connais mieux les systèmes Unix que windows, ce que j'avais aussi dit précédemment avec les buffer caches, je ne sais pas du tout comment c'est géré sous windows.

  20. #20
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 171
    Par défaut
    Citation Envoyé par hegros
    C'est quoi ton système ? Et ne me dis pas MS...qui se trouve ici
    je suis sous linux avec mandrake 10.1 je sais c'est un peu démodé

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PC portable] 5 partitions - les conséquences ?
    Par Invité dans le forum Ordinateurs
    Réponses: 10
    Dernier message: 29/09/2012, 17h32
  2. Une éruption solaire: les conséquences?
    Par x2011 dans le forum Actualités
    Réponses: 4
    Dernier message: 25/01/2012, 09h40
  3. Réponses: 3
    Dernier message: 22/11/2011, 08h32
  4. Réponses: 10
    Dernier message: 25/05/2010, 07h10
  5. Réponses: 4
    Dernier message: 13/09/2006, 14h17

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