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
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
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.
Merci mais j'ai pas bien compris
si en prend l'exemple de cette structure
la taille générale de cette structure est 9 bytes
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; };
ou il va ajouter des padding ?
d'abord ça veux dire quoi padding ?
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).
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.
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
"they need to make sure their structures are packed."
faut utiliser le pragma.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager