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 :

Allocation dans un segment de mémoire partagé


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Allocation dans un segment de mémoire partagé
    Bonsoir à tous,

    Je cherche à créer une liste linéaire chaînée dans un segment de mémoire partagée, comment puis-je faire ? J'ai bien cherché mais j'ai rien trouvé à propos de ça. Plus exactement, lorsque je fais malloc() pour un maillon de la liste, je voudrais que cette allocation se fasse dans le segment de mémoire partagée que j'ai créé précédemment. Merci d'avance pour vos réponse

  2. #2
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    C'est de la mémoire partagé que tu crées avec quoi ? Et c'est pour partager entre des threads ou des processus ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Allocation dans un segment de mémoire partagé
    Bonjour,

    C'est le processus père qui crée le segment de mémoire partagé, et c'est ses processus fils qui vont l'utiliser pour créer une liste d'enregistrements dans ce segment, afin que cette liste soit accessible par tous les processus fils.

  4. #4
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    La mémoire partagée est un moyen efficace de transmettre des données entre les programmes. Un programme permettra de créer une portion de mémoire qui d'autres processus (si cela est autorisé) peuvent accéder.

    Je pense que vous devez attacher la mémoire a ton programme, et de manager le pointer sur la partie de la mémoire ajouté.

    un bon exemple a suivre :
    http://www.cs.cf.ac.uk/Dave/C/node27...00000000000000
    "La créativité est faites d'attention et de respect pour les petits faits de la vie."

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Allocation dans un segment de mémoire partagé
    D'accord cmoibal, je vais suivre l'exemple donné sur le lien. Je vous tiens au courant ! Merci pour vos réponses

  6. #6
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par Malek_moly Voir le message
    Bonsoir à tous,

    Je cherche à créer une liste linéaire chaînée dans un segment de mémoire partagée, comment puis-je faire ? J'ai bien cherché mais j'ai rien trouvé à propos de ça. Plus exactement, lorsque je fais malloc() pour un maillon de la liste, je voudrais que cette allocation se fasse dans le segment de mémoire partagée que j'ai créé précédemment. Merci d'avance pour vos réponse
    Salut,

    tu ne peux pas forcer malloc à piocher dans la zone partagée. En effet la mémoire partagée est déja allouée ...
    Il va falloir que tu gères par toi-même les allocations (et les libérations ...).
    La version hypersimple est :
    void* start pointe sur le début de la mémoire partagée, et void* current_free pointe sur le premier octet non alloué. Au départ current_free=s. Une fonction d'allocation pourrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void* mon_alloc(size_t size)
    {
      void* block_start;
      block_start=current_free;
      current_free=current_free+size;
      return block_start;
    }
    Il faut évidemment agrémenter cette fonction de vérifications (assez d'espace ...)
    Le free ne fait rien (dans le cas d'une gestion hyper simplifiée) ou alors il faut avoir une structure qui gère des blocs disponibles en gardant la taille etc ... = réécrire malloc et free ...

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Allocation dans un segment de mémoire partagé
    Merci kwariz pour votre réponse, je vais voir avec votre exemple, car je suis bloqué sur la manière d'affecter une valeur à une case du segment, il me fait ERREUR DE SEGMENTATION. Je vous tiens au courant. Merci

  8. #8
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Attention ... cela est idéal avec une implémentation avec tableau et lien avec indice car l'espace alloué n'aura pas forcément (et même certainement pas) la même adresse dans les deux programmes.

Discussions similaires

  1. Segmentation fault dans un contexte de mémoire partagée
    Par introdisco dans le forum Débuter
    Réponses: 2
    Dernier message: 05/02/2012, 20h48
  2. Segment de mémoire partagée POSIX, socket et select
    Par Antoine J. dans le forum POSIX
    Réponses: 2
    Dernier message: 06/12/2011, 16h42
  3. Segment de mémoire partagé
    Par dedibox26 dans le forum Débuter
    Réponses: 3
    Dernier message: 13/05/2010, 00h18
  4. [SHM] shmget crée uniquement des segments de mémoire partagée privée
    Par prgasp77 dans le forum Administration système
    Réponses: 1
    Dernier message: 23/09/2009, 08h20
  5. [IPC] libération segment mémoire partagée
    Par joyled dans le forum Linux
    Réponses: 10
    Dernier message: 31/12/2008, 00h51

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