Comment connaitre la taille d'une structure c

Signaler
Messages postés
45
Date d'inscription
samedi 5 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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:

3 réponses

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
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.
Messages postés
45
Date d'inscription
samedi 5 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

hein?
si j'ai bin capter tout depend de mon compilateur par defaut je pense que c'est 4 octect..parlez un peux du 2eme cas :
 
     struct s {
            char c;
            short d;
            char l;
            int ent;
    }
sizeof(s) donne 12 pourquoi?svp
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
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.

ciao...
BruNews, MVP VC++