Des octets magiques ???
Vincent
-
Marden Messages postés 1072 Date d'inscription Statut Membre Dernière intervention -
Marden Messages postés 1072 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
quand on met des double et des int dans une structure, la structure à 4 octets de trop, POURQUOI ça fait ça ??? (du coup on ne peut pas utiliser fread avec une structure, c embêtant...)
Merci beaucoup d'avance à celui qui pourra m'expliquer !
quand on met des double et des int dans une structure, la structure à 4 octets de trop, POURQUOI ça fait ça ??? (du coup on ne peut pas utiliser fread avec une structure, c embêtant...)
Merci beaucoup d'avance à celui qui pourra m'expliquer !
#include <ansi_c.h> #include <userint.h> typedef struct { int champ1; double champ2; } t_struct; int main(void) { t_struct var1; unsigned int na, nb, ns, nsa, nsb; int a=1; double b=2.3; var1.champ1 = a; var1.champ2 = b; na = (unsigned int) sizeof(a); nb = (unsigned int) sizeof(b); ns = (unsigned int) sizeof(var1); nsa = (unsigned int) sizeof(var1.champ1); nsb = (unsigned int) sizeof(var1.champ2); printf("taille de a = %d octets\n",na); printf("taille de b = %d octets\n",nb); printf("taille de var1.champ1 (= a) = %d octets\n",nsa); printf("taille de var1.champ2 (= b) = %d octets\n",nsb); printf("taille de var1 = %d octets\n",ns); printf("D'ou viennent ces 4 octets ?!!!\n"); MessagePopup ("", "OK"); }
A voir également:
- Combien y a-t-il de bits et d'octets, au total, ci-dessous ? 0100101101101001 0111100101101111 0110101101101111
- Winrar 64 bits - Télécharger - Compression & Décompression
- 32 bits - Guide
- Clé windows 10 pro 64 bits gratuit - Guide
- Total uninstall - Télécharger - Divers Utilitaires
- Formule total excel - Guide
1 réponse
Bonsoir Vincent,
Une partie du problème vient du choix d'implémentation des membres d'une structure, consistant à respecter "l'alignement" sur une frontière de "double", pour faciliter les problèmes d'adressage et de chargement. D'autres constructeurs "savent" manipuler les variables, quelque soit leur type, à des adresses quelconques.
Il aurait été bien que tu nous donnes les résultats ...
Un moyen de vérifier tes dires serait d'éditer les adresses de la structure et de chacun des membres, et même de déclarer un tableau de 2 structures, pour noter l'écart entre leurs adresses (logiquement égal à la taille).
Une partie du problème vient du choix d'implémentation des membres d'une structure, consistant à respecter "l'alignement" sur une frontière de "double", pour faciliter les problèmes d'adressage et de chargement. D'autres constructeurs "savent" manipuler les variables, quelque soit leur type, à des adresses quelconques.
Il aurait été bien que tu nous donnes les résultats ...
Un moyen de vérifier tes dires serait d'éditer les adresses de la structure et de chacun des membres, et même de déclarer un tableau de 2 structures, pour noter l'écart entre leurs adresses (logiquement égal à la taille).