PeteTheBull
Messages postés7Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention22 juin 2005
-
16 févr. 2005 à 09:40
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
16 févr. 2005 à 11:50
Bonjour
J'ai un petit problème en c++ (sous VC++6). Je défini une structure du style :
typedef struct
{
__int64 B;
char A;
} MyStruct;
Et la fonction sizeof(MyStruct) me renvoie toujours 16 octets, alors
que si je compte bien, cela devrait etre 8 + 1. Visiblement, il compte
le "char" comme 8 octets. Comment cela se fait-il, et comment peut-on
avoir la taille correcte ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 16 févr. 2005 à 09:51
Ceci est du à l'alignement des données en mémoire pour que le processeur accède à une variable en 1 cycle.
- les variables d'un octet n'ont pas besoin d'être alignées.
- les variables de 2 octets doivent être situées à des adresses multiple de 2
- les variables de 4 octets doivent être situées à des adresses multiple de 4
...
Dans une structure, le compilo fait en sorte que cela soit respecté. Avec les options par défaut sous VC6, l'alignement est sur 8 octets, toutes les structures seront donc multiple de cette valeur. Tu peux modifier cette valeur dans les options du projet mais mettre autre chaose que 4 ou 8 peut réduire les performances lors de l'accès aux structures.
dans tu structure, tu as bien 8 octets+1 octet mais tu as en plus 7 octets inutilisé pour que la variable suivante en mémoire soit bien alignée.
PeteTheBull
Messages postés7Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention22 juin 2005 16 févr. 2005 à 10:01
Si je comprends bien, il n'y a pas de solution : en fait, avec un
"write", je voulais juste ecrire le contenu de la structure dans un
fichier, mais il rajoute les 16-9=7 octets en plus. Je n'ai pas d'autre
choix que de le faire champ par champ ?