Juste pour ajouter de Ben grande réponse:
Définir les membres de la structure dans le même ordre qu'ils sont par la suite accessible dans votre application permettra de réduire les défauts de cache et peut-être augmenter les performances. Cela fonctionne à condition que la totalité de la structure ne rentre pas dans le cache L1.
D'autre part, de commander les membres de la plus grande à la plus petite, peut réduire l'ensemble de l'utilisation de la mémoire, qui peut être importante lors de stocker un tableau de petites structures.
Supposons que pour une architecture (je ne les connais pas bien, je pense que ce serait le cas pour les paramètres par défaut de 32 bits gcc, quelqu'un va me corriger dans les commentaires) cette structure:
struct MemoryUnused {
uint8_t val0;
uint16_t val1;
uint8_t val2;
uint16_t val3;
uint8_t val4;
uint32_t val5;
uint8_t val6;
}
prend 20 octets en mémoire, alors que ceci:
struct MemoryNotLost {
uint32_t val5;
uint16_t val1;
uint16_t val3;
uint8_t val0;
uint8_t val2;
uint8_t val4;
uint8_t val6;
}
Prendra 12. C'est 8 octets perdus en raison du rembourrage, et c'est une augmentation de 67% de la taille de la smallers struct. Avec un grand nombre de ces structures, le gain serait important, tout simplement parce que la quantité de mémoire utilisée, va diminuer la quantité de défauts de cache.