begin process at 2012 05 30 18:21:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Taille d'une structure en mémoire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
#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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales