Accueil > Forum > > > > Taille d'une structure en mémoire
Taille d'une structure en mémoire
mercredi 16 février 2005 à 09:40:00 |
Taille d'une structure en mémoire

PeteTheBull
|
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 ?
Merci d'avance
|
|
mercredi 16 février 2005 à 09:51:28 |
Re : Taille d'une structure en mémoire

ymca2003
|
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.
|
|
mercredi 16 février 2005 à 09:52:59 |
Re : Taille d'une structure en mémoire

BruNews
|
Ton compilo aligne les donnees sur 8 (a ta place). Il a donc ajouté char dummy[15] dans ta structure et c'est heureux comme situation.
ciao... BruNews, MVP VC++
|
|
mercredi 16 février 2005 à 10:01:42 |
Re : Taille d'une structure en mémoire

PeteTheBull
|
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 ?
|
|
mercredi 16 février 2005 à 11:35:55 |
Re : Taille d'une structure en mémoire

ymca2003
|
Si tu veux vraiment que ta structure fasse 7 octets tu peux faire : #include <pshpack1.h> typedef struct { __int64 B; char A; } MyStruct; #include <poppack.h>
Cependant si tu ne dois pas suivre un format précis pour écrire dans le fichier je te conseille de ne pas jouer avec l'alignement.
|
|
mercredi 16 février 2005 à 11:36:25 |
Re : Taille d'une structure en mémoire

ymca2003
|
La structure fera bien sûr 9 octets et non pas 7.
|
|
mercredi 16 février 2005 à 11:50:04 |
Re : Taille d'une structure en mémoire

BruNews
|
#pragma pack(1) typedef struct { __int64 B; char A; } MyStruct; #pragma pack()
tu auras bien la somme des tailles des membres mais comme dit par ymca2003, évite ce genre de choses absolument.
ciao... BruNews, MVP VC++
|
|
Cette discussion est classée dans : taille, char, mémoire, structure, mystruct
Répondre à ce message
Sujets en rapport avec ce message
Taille de ma structure [ par crocejf2000 ]
Salut a tous, J'ai un tres gros probleme qui me bloque toute mon avancé dans mon prog : j'ai une structure : typedef struct{ unsigned short Locate; ch
!!! Pb d'allocation mémoire !!! [ par yoyo269 ]
Bonjour à tous !Comme le titre l'indique, j'ai un petit souci avec l'allocation de mémoire.En fait j'ai un char*, auquel j'applique un malloc. Ensuite
Allocation de mémoire dynamique [ par clmercutio ]
Hello, je me permet d'appeller a l'aide car je deviens fou. J'ai 2 ou 3 questions. Premierement, j'ai réalise un kakuro comme projet, pour la premiere
Pb Fin de transmission recv [ par makmibad ]
Voila, il y a quelque chose que je ne comprends pas :La fonction recv devient bloquante ds certain cas et pas d'autres ; je m'explique :Si j'envoie ca
structure [ par lektrosonic ]
Bojour,j'ai cree cette structure:typedef struct element element;struct element{ SOCKET socket; unsigned int con_type; int index; BOOL conn
taille des types... [ par li ]
Bonjours a tous. Voila ma question, j'ai une structure : struct header { unsigned char useless1: 1; unsigned char type : 1; unsigned short dat
Taille variables dans une class/struct [ par LA_Tupac ]
Salut à tous. Je me penche sur la taille des données car je fais des écritures binaires d'objets à taille variable dans des fichiers. En faisant des t
récupération adresses structure [ par romauto750 ]
Bonjour à tous, J'ai une petite question concernant les adresses. Lors de la lecture d'un fichier je stocke les éléments dans une structure (je fa
taille d'une structure à partir d'un pointeur sur la structure ? [ par rovkoupov ]
Bonjour Je suis à la recherche d'une façon simple pour obtenir la taille en octet d'une struture à partir d'un pointeur sur cette structure. Avec la f
tableau dynamique de structure plusieurs structure différente en C ? [ par Nico_35136 ]
Bonjour a tous, Voila je débute dans l'allocation dynamique en C voici mon problème. Je possédé 5 structure de taille différentes qui vont contenir
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|