• [^] # Re: suckless !! More is less !

    Posté par . En réponse au journal Pourquoi un PC ralentit-il ?. Évalué à 2.

    Tu as raison sur le principe, pour éviter le padding d'une structure on ordonne les champs dans l'ordre de taille décroissante. Mais tu ne choisi pas forcément le codage d'une trame BUS que tu reçois par exemple.

    Sinon, il y a une petite erreur sur ton premier exemple :

    struct toto_s {
     uint8_t f1;
     uint32_t f2;
     uint16_t f3;
     uint64_t f4;
     uint8_t f5;
    };
    // Avec padding
    struct toto_s {
     uint8_t f1; // offset 0
     char padding1[3]; //offset 1
     uint32_t f2; // offset 4 : Aligné sur 32bits
     uint16_t f3; // offset 8 : Aligné sur 16
     char padding2[6]; // offset 10
     uint64_t f4; // offset 16 : Aligné sur 64
     uint8_t f5; // offset 24 : Aligné sur 1 ;-)
    };

    Un simple sizeof entre une structure bien rangé et une autre est vraiment parlant. C'est utile quand la RAM peut manquer, sinon, je trouve plus clair de mettre des champs qui ont des affinités ensembles.