IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

taille de structure bizarre ...


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 7
    Points : 12
    Points
    12
    Par défaut [Résolu]taille de structure bizarre ...
    Bonjour,
    J'aimerais simplement une explication ...
    Voici un morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Test {
       unsigned int a;
       unsigned short int b;
    }
    Alors, sachant que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(unsigned int) = 4
    et que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(unsigned short int) = 2
    qui pourrait m'expliquer comment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(struct Test) = 8
    ... suite à une petite recherche dans Google j'ai trouvé une page où l'on disait
    La disposition des champs dans la structure fait que la taille de la structure est supérieure ou égale à la somme des tailles des champs
    ... une piste ?

    Merci de satisfaire ma curiosité

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le compilo applique un alignement (4 octets il me semble) sur ta structure pour faciliter les accès mémoires. Bon je connais pas très bien les détails et ce qu'il y a derrière tout ça, je laisse ça pour qq'un d'autre, mais en tout cas tu peux changer la valeur de l'alignement dans les options de ton compilo. Avec VC6 tu peux notamment le faire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #pragma pack(push, 1)
    ... // la déclaration de ta structure. Ici l'alignement vaudra donc 1
    #pragma pack(pop)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 7
    Points : 12
    Points
    12
    Par défaut
    Je ne sais pas que c'est cela mais j'ai le même genre de bizarrerie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct Test {
        char c;
        short int d;
    }
    où j'obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(struct Test) = 4
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(char) + sizeof(short int) = 3
    Par contre, une structure ne contenant qu'un char est bien de taille 1 ...

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    Comme l'a indique Loulou24 c'est un probleme d'alignement...

    Pour facilité le déplacement des uns et des autres, on construit des routes, et ceux qui ont le malheur d'avoir leur habitation sur le trajet d'une future route voient celle-ci frappée d'alignement....

    ...Il en est de meme dans la mémoire d'un ordinateur, en passant de 8 à 16, puis de 16 à 32, et maintenant de 32 à 64 bits les communications entre proc et memoire ne se font plus octet par octet par octet, mais par serie de 2, 4 ou meme 8 octets...

    c'est ce qui explique que des trous soient laissés dans les structures pour eviter des pertes de perfomances lors des acces aux données non alignées...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. taille des structures
    Par nemodev dans le forum C++
    Réponses: 15
    Dernier message: 21/10/2009, 22h25
  2. Problème de taille de structure
    Par shenril dans le forum C
    Réponses: 12
    Dernier message: 09/06/2008, 22h32
  3. Problème de "marge non désirée" + taille de zone bizarre
    Par straitch dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 26/09/2007, 08h07
  4. [WIN XP]taille bizarre DU disque
    Par WELCOMSMAIL dans le forum Windows XP
    Réponses: 6
    Dernier message: 19/04/2006, 13h01
  5. Probleme taille structure / parsing tag mp3
    Par lucas_sophia dans le forum C
    Réponses: 6
    Dernier message: 19/03/2006, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo