Question

J'ai une structure que je voudrais optimiser l'empreinte.

typedef struct dbentry_s {
   struct dbentry_s* t_next;
   struct dbentry_s* a_next;
   char *t;
   char *a;
   unsigned char feild_m;
   unsigned char feild_s;
   unsigned char feild_other;
} dbentry;

Si je comprends bien, le compilateur crée des structures en mémoire que vous les définissez. doivent être déclarés Donc types plus grands d'abord pour les petits types peuvent remplir les trous d'alignement.

J'ai lu l'article de wikipedia sur l'alignement de la structure de données et d'autres articles sur la question. http://en.wikipedia.org/wiki/Data_structure_alignment

Mais je ne suis toujours pas sûr, est ma commande actuelle la plus optimale ou suis-je manque quelque chose?

Note: Mon compilateur ne supporte pas les "#pragma pack"

Était-ce utile?

La solution

Non, cela devrait être l'ordre le plus optimal en fonction du comportement du compilateur commun (en gardant à l'esprit que la norme ne précise pas réellement comment les structures sont emballés par rapport aux espaces entre les éléments, bien qu'il ne garantit l'ordre est aussi spécifié. voir '6.2.5 Types' du dernier projet C1x-n1425)

Vous avez tous vos pointeurs vers le haut l'avant et tous vos personnages vers le bas du dos, de sorte que vous constaterez probablement que, avec une taille de pointeur de quatre octets, vous vous retrouverez avec une structure ou 20 19- octets.

Vous pouvez facilement vérifier en insérant les lignes suivantes dans votre code:

printf ("Size of dbentry* is %d\n", sizeof (struct dbentry_s*));
printf ("Size of char*    is %d\n", sizeof (char*));
printf ("Size of uns char is %d\n", sizeof (unsigned char));
printf ("Size of stucture is %d\n", sizeof (dbentry));

La raison pour laquelle je l'ai mis dans tous les chèques de sizeof est de vous assurer d'avoir une information complète. Je suis bien conscient du sizeof(char) est toujours 1.

Autres conseils

Vous pourriez être intéressé à utiliser pahole et / ou # Cruncher . Les deux sont des outils qui analysent la disposition des structures en mémoire.

Référence:. Originale Maciej Sinilo blog Le post sur Cruncher #

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top