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 :

que signifie la directive #pragma pack(1)


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Points : 43
    Points
    43
    Par défaut que signifie la directive #pragma pack(1)
    Bonjours,,
    j'ai trouvé cette directive dans un code d'un driver , j'ai observé qu'il utilise beaucoup de structure , je crois qu'il a une relation avec ces derniers

    j'aimerai savoir son rôle
    Merci d'avance

  2. #2
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    il permet d'indiquer au compilateur de ne pas ajouter de padding entre les membres d'une structure afin que sa taille soit exactement egale à la somme des tailles de ces membres.

  3. #3
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Points : 43
    Points
    43
    Par défaut
    Merci mais j'ai pas bien compris
    si en prend l'exemple de cette structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct  B {
     
    	char A;
     
    	int C;
     
           int D;
     
    };
    la taille générale de cette structure est 9 bytes
    ou il va ajouter des padding ?
    d'abord ça veux dire quoi padding ?

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Justement, la taille de cette structure est de 9 bytes s'il n'y a pas de padding, mais la taille de cette structure est normalement, sur un processeur 32 ou 64 bits, de 12 bytes. Cela est du aux contraintes d'alignement et padding est un terme anglais qui, au sens figuré, signifie remplissage (remplissage des vides).

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Citation Envoyé par xweb-10 Voir le message
    d'abord ça veux dire quoi padding ?
    Padding signifie « rembourrage », mais ce n'est pas un terme propre aux structure, ni au C, ni même à l'informatique ! :-) Quoi qu'il en soit, sur une machine 32 bits, si ton char mesure un octet, il est probable que le compilateur ajoute trois octets vides à sa suite pour que le membre suivant, « int C », soit positionné sur une adresse multiple de 4 et ce, pour les raisons exposées dans la page derrière le lien que Melem te propose.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Demande explications complémentaires sur "pragma pack"
    bonjour à vous

    merci pour ces explications fournies ci dessus qui m'éclairent sur la réponse que j'ai obtenu d'un sous traitant. Toutefois, j'aimerai partager mon analyse de mon problème pour être sur d'avoir bien compris :

    * je développe actuellement un calculateur VME à base de CPU x86 (de chez Kontron)
    * j'utilise plusieurs cartes PMC dont une développée par Curtiss Wright.
    * je travaille avec un linux embarqué (ElinOs v5.0)
    * mes amis de CW, eux, travaillent d'habitude sur CPU PPC avec un linux à eux (semble-t-il)

    lorsque nous avons voulu valider le fonctionnement du driver de la PMC de CW, dans notre environnement, nous avons rencontré différentes difficultés dont un pb d'endianness (nous étions quasi sur de rencontrer le pb).

    Maintenant, mes amis canadiens (CW...) me répondent aussi "once this hurdle is passed (le swap de tous les champs de toutes les commandes du driver !), they (nous !) need to make sure their structures are packed. This is also known as "pragma pack". The PMC expects that."

    Dois je donc comprendre qu'à la reprise du driver, il nous faudra faire attention aux options de compilation => pour éviter le "remplissage" ou pour justement le forcer ? ou alors j'ai rien compris ?

    pour info, je pilote le développement du calculateur mais vous aurez compris que je ne développe pas et que ca date la dernière fois que j'ai fait du code !!! mais je peux essayer de comprendre !

    Merci à vous pour vos lumières

  7. #7
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    "they need to make sure their structures are packed."

    faut utiliser le pragma.

Discussions similaires

  1. Que signifie #pragma
    Par _LVEB_ dans le forum Visual C++
    Réponses: 1
    Dernier message: 23/01/2007, 23h17
  2. Que signifie la directive .model ?
    Par dark0502 dans le forum Assembleur
    Réponses: 1
    Dernier message: 05/11/2006, 00h23
  3. directive #pragma pack()
    Par philippe V dans le forum C++
    Réponses: 3
    Dernier message: 06/06/2005, 19h27
  4. Que signifie Pagesize ?
    Par anthony70 dans le forum Débuter
    Réponses: 3
    Dernier message: 31/08/2004, 14h31
  5. Que signifier $0 et $@
    Par jaabouc dans le forum Linux
    Réponses: 6
    Dernier message: 01/06/2004, 16h17

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