bonjour tout le monde,
auparavant,t je pensait que pour connaitre la taille d'une structure c mentalement il suffisait de sommer la taille de tout les éléments de la structure mais je découvre après avoir lu ce tuto que c'est pas tout le temps le cas :
http://melem.developpez.com/reseaux/rawsockets/ si quelqu'un peux m'aider a comprendre c'est quoi les contraintes d'alignement et comment on calcule mentalement
la taille d'une structure se serais gentil.
merci d'avance pour vos reponse.
A voir également:
Taille d'une structure en c
Récupérer la taille d'un tableau en c - Meilleures réponses
Sommer la taille des éléments d'un structure !!!! Erreur fatale.
Tout dépend comment est configuré le compilo, mais généralement les compilo aligne à 4 ou 8 octets.
Avec l'expérience tu apprendras, t'expliquer est assez difficile il faudrait lister tous les cas.
Si on reprend le totu :
<code class="c_keyword3">struct
s
{
char
c;
/*
1
octet
*/
int
n;
/*
4
octets
*/
}
;
Si ton compilo aligne à 4 : sizeof(s) = 8
</code>
<code class="c_keyword3">struct
s2
{
char
c;
/*
1
octet
*/
</code>
<code class="c_keyword3">char
c2;
/*
1
octet
*/
</code>
<code class="c_keyword3">int
n;
/*
4
octets
*/
}
;
</code>
Si ton compilo aligne à 4 : sizeof(s2) = 8 (aussi)
D'où de grosse surprise si tu as 2 programmes qui n'alignent pas de la même façon.
J'ai eu ce pb avec un programme Windows et l'autre sous Linux.
typedef struct _S {
char c;
short d;
char l;
int ent;
} S;
Exemple avec une struct S commençant à l'adresse 1000:
adresse de S.c : 1000
adresse de S.d : 1002 // multi de 2 !!!
adresse de S.l : 1004
adresse de S.ent : 1008 // multi de 4 !!!
la struct finira bien à l'adresse 1011, donc 12 octets.