Taille d'une variable de type structure
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Taille d'une variable de type structure



  1. #1
    narakphysics

    Taille d'une variable de type structure


    ------

    Bonjour à touts et à toutes
    j'ai déclaré une structure contenant 4 variables :
    1- de type int ;
    2- de type float;
    3- union : sa taille est 4 octets
    4-union : sa taille est 2 octets.
    Ensuite j'ai déclaré une variable "wave" de type cette structure.
    après l'exécution du mon code le compilateur m'affiche 16 Bytes comme taille de cette variables au lieu de 14 .
    Nom : structure.png
Affichages : 148
Taille : 3,4 Ko
    Si on compte le nombre d'octets : 4+4+4+2=14 octets!! d'où vient les deux autres??
    Merci d'avance

    -----

  2. #2
    Jack
    Modérateur

    Re : Taille d'une variable de type structure

    Je voudrais bien voir ta déclaration sous forme de code, mais je pense qu'il y a eu alignement: tous les champs de la structure font 4 octets. Tu as essayé un "sizeof" sur chacun de tes champs?

  3. #3
    narakphysics

    Re : Taille d'une variable de type structure

    Merci Jack de votre réponse
    Citation Envoyé par Jack Voir le message
    Je voudrais bien voir ta déclaration sous forme de code, mais je pense qu'il y a eu alignement: tous les champs de la structure font 4 octets. Tu as essayé un "sizeof" sur chacun de tes champs?
    Non j'ai pas essayé un sizeof sur chacun des champs.
    Voici la déclaration de la structure :
    Code:
    typedef struct 
    {
    int freq;
    float length;
    
    union{            
        vuint32_t R;          
        struct{         
           vuint32_t C:10;              
           vuint32_t :22;
             } B;       
     } R0;                  
    union{            
         vuint16_t R;           
         struct{                
         vuint16_t type:8;                 
         vuint16_t :8
             } B;       
     } R2;                
    } MyWave_t;
    Dernière modification par narakphysics ; 28/04/2013 à 00h38.

  4. #4
    Jack
    Modérateur

    Re : Taille d'une variable de type structure

    Non j'ai pas essayé un sizeof sur chacun des champs.
    Essaie alors.

    en passant, tu sais que tu n'est plus obligé de nommer tes unions ou tes structures internes à la structure principale?
    De plus, il manque un ; après vuint16_t :8

  5. A voir en vidéo sur Futura
  6. #5
    narakphysics

    Re : Taille d'une variable de type structure

    Citation Envoyé par Jack Voir le message
    De plus, il manque un ; après vuint16_t :8
    oui désolé, problème au niveau copier-coller.
    Citation Envoyé par Jack Voir le message
    Essaie alors.
    Il m'affiche 16 Bytes!
    et lorsque j'affiche toutes ses informations, le compilateur ajoute une ligne à la fin!! (16 bits)
    Nom : structure1.png
Affichages : 136
Taille : 4,2 Ko
    Citation Envoyé par Jack Voir le message
    en passant, tu sais que tu n'est plus obligé de nommer tes unions ou tes structures internes à la structure principale?
    Je ne le savais pas. Dans ce cas pour accéder par exemple au champ C, on écrit directement : wave.C??

  7. #6
    Jack
    Modérateur

    Re : Taille d'une variable de type structure

    Il m'affiche 16 Bytes!
    Je pensais plutôt à tester tes champs individuellement. Par exemple:
    Code:
    	MyWave_t a;	printf("Taille du champ: %d\n", sizeof a.R);
    Tu aurais constaté qu'il t'affiche 4 alors qu'à priori tu t'attendais à 2.

    Un peu d'info ici:
    http://www.pps.univ-paris-diderot.fr...tml#alignement

    Je ne le savais pas. Dans ce cas pour accéder par exemple au champ C, on écrit directement : wave.C??
    Non, on ne peut pas dans ce cas. En revanche, tu n'est pas obligé de nommer tes unions.
    Dernière modification par Jack ; 28/04/2013 à 09h58.

  8. #7
    narakphysics

    Re : Taille d'une variable de type structure

    Citation Envoyé par Jack Voir le message
    Tu aurais constaté qu'il t'affiche 4 alors qu'à priori tu t'attendais à 2.
    oui effectivement j'ai essayé la ligne suivante :
    Code:
        MyWave_t a;    printf("Taille du champ: %d\n", sizeof a.R2.R);
    il affiche : Taille du champ: 4 !!!
    Donc le problème vient de l'alignement.
    Question: Comment je peux savoir que mon processeur fait l'alignement ou non?
    Citation Envoyé par Jack Voir le message
    le lien est très interssant , merci

  9. #8
    Chanur

    Re : Taille d'une variable de type structure

    Citation Envoyé par narakphysics Voir le message
    Question: Comment je peux savoir que mon processeur fait l'alignement ou non?
    Ca ne dépend pas du processeur, mais du compilateur. Voir la doc de ton compilateur.
    En général, il existe des options de compilation permettant de paramétrer l'alignement, mais c'est différent pour chaque compilateur.
    Quel compilateur tu utilises ?
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  10. #9
    narakphysics

    Re : Taille d'une variable de type structure

    Citation Envoyé par Chanur Voir le message
    Ca ne dépend pas du processeur, mais du compilateur. Voir la doc de ton compilateur.
    En général, il existe des options de compilation permettant de paramétrer l'alignement, mais c'est différent pour chaque compilateur.
    Quel compilateur tu utilises ?
    Diab Compiler, juste une version d'essaie.

  11. #10
    Chanur

    Re : Taille d'une variable de type structure

    Désolé, je ne connais pas : je ne pourrais pas te dire comment paramétrer l'alignement des champs des structures .
    Sinon, pour savoir quel alignement est fait, ta démarche (afficher la taille des champs et des structures) me parais la bonne.
    Le principe est que le compilateur ajoute des champs vides de façon à ce que chaque champ commence sur un multiple de 2 octets, ou sur un multiple de 4 octets ou sur un multiple de 8 octets.
    Dernière modification par Chanur ; 01/05/2013 à 23h48.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. Pavage d’un rectangle par des rectangles de taille variable
    Par Slagt dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 14/09/2011, 21h17
  2. comment déterminer une densité d'une variable qui est en fonction d'une autre variable
    Par invite1e252b6d dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 11/09/2010, 20h30
  3. omment déterminer une densité d'une variable qui est en fonction d'une autre variable
    Par invite1e252b6d dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 11/09/2010, 13h41
  4. comment déterminer une densité d'une variable qui est en fonction d'une autre variable
    Par invite1e252b6d dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 04/09/2010, 20h40
  5. Représentation d'une variable automate de type REAL sur 32 bits
    Par invite117abd86 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 21/04/2010, 23h43