(Courriels de diversion: <contredisons@cherirais-acquerrait.com> <emportais@canalisera-boyauter.com> <developperions@vassaliserait-supplie.com> <lezardait@inexplore-exorde.com> <readaptez@regurgiter-comptabiliseront.com> <excuse@dilapidais-nageuses.com> <remontrances@etiolerait-redigeaient.com> <dechaînerons@toxines-basiques.com> <encadrement@mutante-rivaliserai.com> <superficies@minutent-editoriaux.com> )


Jerome Gasperi wrote:
> 
> Salut,
> 
> Un copain a le probleme suivant. Voici le programme C:
> 
> #include<stdio.h>
> 
> struct boom{
>         short int toto;
>         short int titi;
>         short int tata;
>         short int tutu;
>         float youpi;
> } bim;
> 
> void main(){
>         printf("%i\n",sizeof(bim)};
> }
> 
> Le programme renvois la valeur de 12 ce qui estr normal puisque
> float est code sur 4 octets et short int sur 2 : 4*2 +4 = 12 est la taille
> de la structure bim.
> 
> Par contre si on remplace la structure par:
> 
> struct boom{
>         short int toto;
>         short int titi;
>         short int tata;
>         float youpi;
> } bim;
> 
> Le programme renvois aussi 12 alors qu'il devrait renvoyer 3*2+4=10 !!!!
> 
> Pourquoi ?????
Sans doute a cause de l'alignement. Les objets
de type float doivent avoire l'adresse divisee
par 4. Pour le faire, dans ton deuxieme exemple
le compilateur est oblige de garder deux octets
vides pour que float soit a la bonne place.
Enleve le float et la reponse sera 6.

A+. Serguei.

 _______________________________________________________________________
  Le CULTe sur le ouebe: http://savage.iut-blagnac.fr/