Comment connaitre la taille d'une structure c

cs_flofloo Messages postés 45 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 16 mars 2009 - 5 déc. 2008 à 12:05
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 5 déc. 2008 à 18:13
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.

3 réponses

fregolo52 Messages postés 1115 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 3
5 déc. 2008 à 15:37
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.
0
Rejoignez-nous