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 :

Structures, padding, optimisations


Sujet :

C++

  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut Structures, padding, optimisations
    Bonjour,

    Je connais tr�s peu cette notion de padding.

    D'apr�s ce que j'ai cru comprendre, tout champ d'une structure doit commencer � un multiple de sa taille. Si on force la largeur des membres via un champs de bits via la syntaxe suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    class A
    {
        ....
        uint_32t mValue : 5;
        ....
    };
    Puis-je me contenter d'encha�ner les membres, en m'assurant de tomber pile sur les multiples de 32 bits (ou 64 bits) ?

    Si, sur une archi 32 bit, je n'ai besoin que de 30 bits, dois-je explicitement faire un champ de 2 bits que je n'utiliserai pas ?

    Dois-je d�couper ma structure en plusieurs structure, pour limiter la taille de la structure � 32 ou 64 bits ?

    Si je travaille en 64 bits, et que j'ai besoin d'une structure � 90 bits, la meilleure solution est-elle de faire une classe de 64 bits, et une autre de 32 bits (cette derni�re comportant �ventuellement des bits de remplissage) ?

  2. #2
    Membre extr�mement actif

    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 408
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 408
    Par d�faut
    la notion de padding, d'alignement et autre c'est surtout pour optimiser les acc�s (et pour �viter les crashs sur certaines architectures).

    si tu as besoin d'une structure compacte, utilise un #pragma pack.

    le probl�me de tes questions c'est que c'est d�pendant du compilateur, le mieux, c'est de tester en situation, et tu verras ce que ton compilateur te sortira comme tambouille.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Citation Envoy� par stardeath Voir le message
    la notion de padding, d'alignement et autre c'est surtout pour optimiser les acc�s (et pour �viter les crashs sur certaines architectures).
    C'est aussi tr�s utile pour faire de la s�rialisation/d�s�rialisation proprement, les donn�es pouvant se transmettre d'une architecture � une autre ! Un #pragma pack(1) est alors bien utile dans beaucoup de cas.

    Oodini: Ce que tu "dois" faire va d�pendre de ton objectif. Si tu veux des structures les plus compactes possibles, pragma pack suffira. Tu n'as pas besoin de remplir toi m�me les octets manquants s'il y en a. Quel r�sultat cherches-tu � obtenir ?

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    C'est effectivement pour faire de la d�serialisation.

    Et j'aimerais si possible une solution Windows/Linux.

    Mais vous dites que #pragma pack rend inutile de pr�ciser le nombre de bits ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    De toute fa�on, tu n'alignes pas sur des bits mais sur des octets. La notion de taille (telle que la renvoie sizeof par exemple) se r�f�re aux octets. Tu peux bien s�r travailler quand m�me au bit pr�s (encore que, je ne suis m�me pas s�r) mais �a complique pas mal la t�che ^^.

    #pragma pack(1) va aligner ta structure sur un octet, ce qui signifie que tu n'auras pas de padding.

    Lorsque tu travailles sur la s�rialisation/d�s�rialisation, prend garde aux probl�mes d'endianess et au conventions en vigueur dans le protocole utilis�. Il me semble par exemple que la convention en vigueur pour les donn�es qui transitent sur un r�seau est d'utiliser Big Endian alors que la plupart des plateformes (dont x86) sont en Little Endian (je ne suis pas sp�cialiste en la mati�re, pas taper si j'ai dit une connerie).

    Peut-�tre que protobuf peut te rendre service.

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Le mieux pour d�s�rialiser ind�pendamment de la plate-forme, c'est de ne reposer ni sur pack ni sur l'endianness, et toujours d�s�rialiser byte par byte (voir ce thread par exemple).

    Par contre, si tu sacrifies l'ind�pendance � la plate-forme, le fait d'utiliser directement une structure pack�e et compter sur la plate-forme pour avoir la bonne endianness permet d'acc�der au contenu du fichier directement avec un mapping m�moire, ce qui est super pour les paresseux.

    La vie est une question de compromis...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. structure identique optimisation diff�rente
    Par overider dans le forum Requ�tes
    R�ponses: 0
    Dernier message: 16/03/2011, 11h33
  2. Structure hi�riarchique � optimiser (la rendre �volutive)
    Par Greg221 dans le forum Optimisations
    R�ponses: 17
    Dernier message: 06/09/2008, 18h32
  3. Desactiver une structure d'optimisation
    Par msami dans le forum Outils
    R�ponses: 6
    Dernier message: 23/04/2008, 20h18
  4. padding entre les elements d'une structure
    Par chacal dans le forum R�seau
    R�ponses: 5
    Dernier message: 18/11/2005, 08h56
  5. Structure FIFO optimis�e � l'acc�s
    Par guipom dans le forum Langage SQL
    R�ponses: 5
    Dernier message: 03/11/2005, 09h56

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