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 :

memoire partagée : pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut memoire partagée : pointeur
    Bonsoir,

    J'ai partagée une structure en mémoire partagée. Lorsque je mets un tableau a 2 dimension dans ma structure, il n'y a pas de problèmes, mais lorsque je remplace ce tableau par un pointeur **, on dirait que la mémoire n'est plus partagée. Est-ce que c'est normale, que la memoire partagée n'agit plus avec un pointeur a l'intérieur de la structure que j'ai partagée.

    Merci de votre réponse

  2. #2
    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
    ben ça dépend vers quoi pointe ce pointeur

    Si tu fais de l'allocation dynamique sans utiliser les routines de la bibliothèque de mémoire partagée (shmem si mes souvenirs sont bons), alors ça ne sera pas partagé.. Le pointeur oui, mais pas la zone vers laquelle il pointe...

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par samplaid Voir le message
    Bonsoir,

    J'ai partagée une structure en mémoire partagée. Lorsque je mets un tableau a 2 dimension dans ma structure, il n'y a pas de problèmes, mais lorsque je remplace ce tableau par un pointeur **, on dirait que la mémoire n'est plus partagée. Est-ce que c'est normale, que la memoire partagée n'agit plus avec un pointeur a l'intérieur de la structure que j'ai partagée.

    Merci de votre réponse
    Tout à fait normal.

    Quand tu stockes un tableau dans une structure, tout le contenu du tableau est positionné dans la structure. C.a.d. que si la structure contient deux int et ton tableau de 20 car. et qu'elle commence à l'adresse 1000, alors le premier int sera en 1000, le second en 1004 et le tableau occupera les adresses de 1008 jusqu'à 1027 (excepté quelques détails d'alignements que fait le compilo pour optimiser un peu).
    Donc quand tu claques ta structure en shm via memcpy, ben toute la structure est copiée y compris le tableau.

    Maintenant tu remplaces ce tableau par un pointeur (indirection) ben ton tableau n'est plus dans la structure. Il est peut-être en adresse 7524 et ta structure qui commence en 1000 contient un int (1000), un 2° int (1004) et un pointeur (1008) qui pointe vers 7524
    Quand tu claques ta structure en shm, ben tu ne copies que le pointeur et non le pointé. Problème connu sous le nom de "shadow copy"...
    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]

  4. #4
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut
    Oui c'est bien ce que je pensais, mais pour ce problème connu sous le nom de shadow copy, comment le réaliser car sur google je trouve pas grand chose la dessus, as-tu une adresse pour moi ou un tuto, stp.

    MERCI

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par samplaid Voir le message
    Oui c'est bien ce que je pensais, mais pour ce problème connu sous le nom de shadow copy, comment le réaliser car sur google je trouve pas grand chose la dessus, as-tu une adresse pour moi ou un tuto, stp.

    MERCI
    Ben tu trouveras rien sur google mis à part le détail du pourquoi du comment. Tu as la raison du problème, à toi de trouver un algo pour le contourner.
    Si j'avais moi-même ce problème je commencerais par créer une fonction dédiée à la copie de ma structure dans une zone mémoire quelconque (un clone de "memcpy()") dans laquelle je ferais bien gaffe de rien oublier de ma structure. Ensuite je pourrais appeler cette fonction quand j'ai besoin à la place de memcpy()...
    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 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 Sve@r Voir le message
    Si j'avais moi-même ce problème je commencerais par créer une fonction dédiée à la copie de ma structure dans une zone mémoire quelconque (un clone de "memcpy()") dans laquelle je ferais bien gaffe de rien oublier de ma structure. Ensuite je pourrais appeler cette fonction quand j'ai besoin à la place de memcpy()...
    Je pense que la vrai question est 'pourquoi faire une copie ?'. L'Art de Programmer, c'est aussi l'art d'éviter les copies...

Discussions similaires

  1. pointeur et memoire partagée
    Par troumar dans le forum C
    Réponses: 21
    Dernier message: 15/09/2012, 12h37
  2. pointeurs dans une memoire partagée
    Par iznogoud36 dans le forum C
    Réponses: 15
    Dernier message: 13/06/2007, 17h05
  3. segment de memoire partagé en C
    Par thierry_b dans le forum C
    Réponses: 2
    Dernier message: 29/11/2005, 21h30
  4. [segment de memoire partagée]
    Par pitit777 dans le forum C
    Réponses: 4
    Dernier message: 26/11/2005, 14h47
  5. Réponses: 13
    Dernier message: 05/05/2004, 19h09

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