Taille exact d'une structure C/C++

Fermé
essome - 14 juil. 2004 à 13:12
 Utilisateur anonyme - 16 juil. 2004 à 07:19
bonjour à tous voici le problème que je rencontre: je veux déclarer une structure en C qui fait une taille fixe (6 ko par exemple). Mais il se trouve que le sezeof ( ma_structure) me donne une taille plus grande.
voici une déclaration:
Struct ma_structure{
unsigned int id : 1;
unsigned int tp : 2;
unsigned int ext_t : 5;
unsigned int min : 6;
unsigned int h : 5;
unsigned int j : 5;
unsigned int ad : 24;

}
Merci d'avance pour vos reponses
A voir également:

6 réponses

Salut,

Tu ne peux pas connaitre à l'avance la taille memoire de ta structure car tu ne sais pas comment le compilo va aligner en memoire les composants de ta structure.

De toute façon, pourqoui vouloir une structure de 6ko?

A+
Damien
0
Utilisateur anonyme
15 juil. 2004 à 00:05
Bonjour,

Je suis d'accord avec Damien, cela dépend de l'organisation
de la structure de stockage, voici ce qu'en j'en ai trouvé:

je cite :

[
Les membres d'une structure ne sont pas nécessairement stockés dans des octets consécutifs de la mémoire. Il y a parfois des trous dans un structure parce que les ordinateurs peuvent stocker des types de données spécifiques seulement à certaines limites de la mémoire telles que le demi-mot, le mot ou le double-mot. Un mot est une unité de mémoire standard servant à stocker des données dans un ordinateur et est habituellement représenté par 2 ou 4 octets. Considérons le définition de la structure suivante, ou les variables (des objets réels, en fait) echantillon1 et echantillon2 dy type Exemple sont déclarées:
struct Exemple {
char c;
int i;
} echantillon1,echantillon2;

Un ordinateur fonctionnant avec des mots de 2 octets (16bits) peut réclamer que chacun des membres de Exemple soient alignés à la limite du mot, c'est à dire au début d'un mot (ceci est strictement dépendant de la machine).
L'exemple binaire suivant montre un exemple d'alignement de stockage pour un objet du type Exemple qui reçoit le caractère 'a' et l'entier 97. Si les membres sont mémorisés à partir des limites de mots, il en résulte un trou d'un octet (l'octet 1 dans l'exemple binaire) dans le stockage des objets du type Exemple.

Exemple binaire:

Octet 0.............1............2.............3............
.........01100001 ............ 00000000 01100001
]
Fin de citation

Il faut la notion de structure interne d'un ordinateur
pour bien en comprendre le sens.

Amicalement
Lupin
0
essome Messages postés 11 Date d'inscription mercredi 14 juillet 2004 Statut Membre Dernière intervention 1 septembre 2004
15 juil. 2004 à 10:00
Bonjour
En fait il s'agit d'une struct qui sera une unité d'information dans un fichier que mon application gere. Donc le superfu me genait quelque peu.
Merci pour tout
0
Utilisateur anonyme
15 juil. 2004 à 18:45
Re :

Si cela as pu t'aider à comprendre, tant mieux :)

Lupin
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bjour Lupin!
Justement j'ai compris et je vais regrouper dans ma declaration les info de sorte que des info consécutives forment des mots (16 ou 32 bit selon la machine) et sa marche à merveille. pas de soucis à me faire pr le changement de machine, j'utilise le même processeur partout.
amicalement, essome
0
Utilisateur anonyme
16 juil. 2004 à 07:19
re:

En effet, et je crois que le 16 bits est en voie de disparition,
nous en somme au 32 bits en production puisque le 64 est
disponible en version spéciale.

Lupin
0