cs_khayyam
Messages postés51Date d'inscriptionlundi 7 juin 2004StatutMembreDernière intervention15 juillet 2005
-
3 août 2004 à 22:01
3psilon -
7 août 2004 à 00:09
bonjour,
j'ai la structure suivante :
typedef struct
{
unsigned char sign1, sign2;
unsigned long size_totale, reserve,offset;
unsigned long size_entete, largeur, hauteur;
unsigned char nb_plans[2], deep_codage[2];
unsigned long method_comp, size_image, reso_ho, reso_ver, nb_coul_pal, nb_cou_imp;
} Header;
si vous comptez les champs ainsi que leur taille, vous trouverez un poids de 54 octets pourtant sizeof(Header) me sort 56 octets (sous windows). comment ça se fait ?
cs_khayyam
Messages postés51Date d'inscriptionlundi 7 juin 2004StatutMembreDernière intervention15 juillet 2005 3 août 2004 à 22:21
encore une chose que je ne savais pas !
mais alors, comment dois-je m'y prendre pour travailler avec un espace de 54 octets que je remplis avec des nombres codés sur 1, 2 ou 4 octets, tel que dans la définition de ma structure ?
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 3 août 2004 à 22:29
ben en memoire l'adresse suivante apres ta struct sera un multiple de 4, donc au moins +56
il faut que tu considere 2 octets de bourrage, tu peux t'arranger pour qu'ils soient à la fin en mettant les 2 chars en dernier ( char = 1 octet donc adresse multiple de 1)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_khayyam
Messages postés51Date d'inscriptionlundi 7 juin 2004StatutMembreDernière intervention15 juillet 2005 3 août 2004 à 22:35
il ne m'est pas possible de mettre mes deux char à la fin, l'ordre des champs doit rester inchangé. mais s'il n'est pas possible de considérer une struct pour travailler avec un espace de 54 octets, vois-tu une autre solution, sachant que cet espace doit être rempli petit à petit par paquets de taille variables (de 1 à 4 octets à la fois) ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 août 2004 à 22:53
Tu es absolument tenu par la forme de cette structure ?
Si est non, faut absolument la changer car tres mauvais comme djl te l'a explique. L'alignement correct des donnees est la 1ere chose a respecter au debut de l'ecriture d'un logiciel.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 3 août 2004 à 23:17
C'est quoi exactement l'alignement des données ?
Et comment savoir si c'est bien alignée ou pas ?
Quel est le probleme de structure dont l'alignement n'est pas correcte ?
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 3 août 2004 à 23:21
ca augmente la taille avec des trous dans l'alignement des donnée et dans un fichier binaire, les données seront lu differement suivant les architectures
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 août 2004 à 23:26
Lecture ecriture donnees de taille:
1 octet aligne sur 1, en terme clair peut se trouver nimporte ou, aucun cycle de penalite.
2 octets (WORD): aligne multiple de 2, penalite car instruction ne sera pas parallelisee.
4 octets (DWORD): aligne multiple de 4, rendement maximum, se fait en 1 cycle processeur et toujours parallelisable.