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 :
structtoto_s{uint8_tf1;uint32_tf2;uint16_tf3;uint64_tf4;uint8_tf5;};// Avec paddingstructtoto_s{uint8_tf1;// offset 0charpadding1[3];//offset 1uint32_tf2;// offset 4 : Aligné sur 32bitsuint16_tf3;// offset 8 : Aligné sur 16charpadding2[6];// offset 10uint64_tf4;// offset 16 : Aligné sur 64uint8_tf5;// 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.
[^] # Re: suckless !! More is less !
Posté par Anthony Jaguenaud . 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 :
Un simple
sizeofentre 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.