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 :

Recoder malloc -> Questions sur la mémoire


Sujet :

C

  1. #1
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut Recoder malloc -> Questions sur la mémoire
    Bonjour,

    J'essaie actuellement recoder malloc en utilisant notamment brk/sbrk. Toutefois, avant de faire ça, il faudrait que je comprenne mieux comment manipuler la mémoire en C. J'ai donc quelques questions :
    - Comment détecter les zones de mémoire libres?
    - Est-il possible d'affiche le contenu d'une zone mémoire? (en spécifiant une adresse et un type d'affichage)
    - Comment fonctionnent brk et sbrk? (car la doc est assez légère)

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625

  3. #3
    b4u
    b4u est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Points : 64
    Points
    64
    Par défaut
    Avec sbrk() et brk(), tu peux augmenter et diminuer la quantité de mémoire allouée pour les données de ton processus. L'entier que tu passes en paramètre à sbrk() te permet de controler la quantité de mémoire dont tu disposera. Par exemple avec:
    tu disposes de 42 (enfin je crois... il y a peut etre des pbs d'alignements je sais plus) octets supplémentaires utilisables pour écrire des données, à partir de addr.

    signifie que tu veux 0 octet de mémoire disponibles à partir de addr.
    Tu peux alors considérer addr comme l'adresse limite (le "break") au-delà de laquelle tu ne peux plus écrire de données sans plantage.
    brk() n'est qu'une alternative à sbrk(), mais ca fonctionne de la meme façon. Un petit exemple qui résume tout ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void test(void)
    {
    	void *old_break;
    	char *str;
    	int *n;
     
    	old_break = sbrk(0);	// on sauvegarde l'adresse du break pour plus tard
    	//[...]
    	str = sbrk(6);			// on alloue 6 octets utilisables à partir de str (le break est maintenant à (old_break + 6 octets))
    	strcpy(str, "hello");	// on utilise la nouvelle plage de mémoire
    	n = sbrk(4);			// un nouvel entier (le break est maintenant à (old_break + 10 octets))
    	*n = 42;
    	//[...]
    	brk(old_break);			// on restaure le tout, équivalent à: sbrk(-10);
    }
    Le malloc est une interface d'accès à sbrk() et brk(), toute la difficulté est de faire le moins d'appels possibles à ces deux fonctions, qui sont des opérations lourdes...

  4. #4
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Merci beaucoup pour les tutoriels et explications !

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

Discussions similaires

  1. Question sur la mémoire
    Par hydrolyre dans le forum SDL
    Réponses: 4
    Dernier message: 09/01/2009, 15h09
  2. Questions sur la mémoire.
    Par alcibiade dans le forum Débuter
    Réponses: 13
    Dernier message: 01/06/2008, 01h26
  3. Question sur firefox/mémoire
    Par Nemesys dans le forum Windows XP
    Réponses: 3
    Dernier message: 21/08/2006, 10h23
  4. [Hardware] questions sur la mémoire virtuelle
    Par Irae dans le forum Composants
    Réponses: 22
    Dernier message: 04/10/2005, 12h41
  5. Quelques questions sur la mémoire
    Par Gruik dans le forum C
    Réponses: 6
    Dernier message: 17/11/2004, 14h38

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