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 :

sizeof et structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Par défaut sizeof et structure
    Bonjour à tous,

    J'ai une question concernant le fonctionnement de l'opérateur sizeof().

    Pour le test, j'ai déclaré la structure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct  test
    {
    	unsigned int var1;
    	unsigned int var2;
    	unsigned int *ptr1;
    	double dblArray[16];
    	unsigned int var3;
    }myStruct;
     
    unsigned short size1 = sizeof(myStruct);
    unsigned short size2 = sizeof(myStruct.ptr1) + sizeof(myStruct.dblArray) + sizeof(myStruct.var1) + sizeof(myStruct.var2) + sizeof(myStruct.var3);
    En résultat j'obtiens size1 = 152 et size2 = 144. Je n'ai pas la même taille et je ne comprends pas pourquoi. La différence de taille proviendrait-elle de l'alignement des données dans la mémoire?

    Si quelqu'un a des réponses sur le sujet, merci de m'éclairer.

    Bonne fin de journée.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    J'ai une question concernant le fonctionnement de la fonction sizeof().
    sizeof est un opérateur, pas une fonction

    Je n'ai pas la même taille et je ne comprends pas pourquoi. La différence de taille proviendrait-elle de l'alignement des données dans la mémoire?
    Oui, il peut y avoir des "trous" entre les champs d'une structure. Par conséquent, la taille peut dépendre de l'ordre de déclaration des champs.

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par ben78
    En résultat j'obtiens size1 = 152 et size2 = 144. Je n'ai pas la même taille et je ne comprends pas pourquoi. La différence de taille proviendrait-elle de l'alignement des données dans la mémoire?
    Oui. Il est vraisemblable que ton compilateur s'arrange pour que les doubles soient places a une adresse multiple de 8, donc il force l'offset de dblArray a etre un multiple de 8 et la taille totale de la struct a etre aussi un multiple de 8. En reordonnant les champs (commence par dblArray par exemple), tu peux vraisemblablement supprimer tout le padding, ce n'est pas toujours possible.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut
    tin je savais pas ça... heureusement que je vois ce topic je vais me coucher moins bete ce soir ^^

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Par défaut
    Merci à vous pour les réponses.

    Bonne journée.
    @plus.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut
    ou bien juste en permuttant les deux dernier champ le doublearray se trouve bien dans un muliple de 8 et la on a 144 et 144

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

Discussions similaires

  1. Structure + DWORD + WORD => sizeof bizarre
    Par hargn dans le forum Débuter
    Réponses: 5
    Dernier message: 22/11/2010, 17h25
  2. sizeof() d'une structure
    Par tut dans le forum MFC
    Réponses: 12
    Dernier message: 29/08/2006, 18h21
  3. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  4. sizeof et structure
    Par titoine1978 dans le forum C++
    Réponses: 9
    Dernier message: 01/03/2006, 08h47
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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