Rechercher : dans
Par :

Taille exact d'une structure C/C++

Dernière réponse le 16 jui 2004 à 07:19:59 essome, le 14 jui 2004 à 13:12:42 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « taille exact d'une structure C/C++ » dans :
Les structures en langage C Voir Différence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les structures en langage C++ Voir Différence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les templates en C++ VoirIntroduction Avantages Inconvénients Quand utiliser des templates ? Que dois-je mettre dans les .hpp et dans les .cpp ? Convention de notations Quelques templates célèbres STL BGL Premiers pas Spécifications de templates Template par...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les pointeurs en langage C VoirDéfinition d'un pointeur Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. La notion de pointeur fait souvent peur car il s'agit d'une technique de programmation très puissante, permettant de définir des...
Langage C - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...

1

damien, le 14 jui 2004 à 21:45:29

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

Répondre à damien

2

Lupin.Arsene, le 15 jui 2004 à 00:05:21

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

Répondre à Lupin.Arsene

3

essome, le 15 jui 2004 à 10:00:19

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

Répondre à essome

4

Lupin.Arsene, le 15 jui 2004 à 18:45:27

Re :

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

Lupin

Répondre à Lupin.Arsene

5

essome, le 15 jui 2004 à 19:15:36

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

Répondre à essome

6

 Lupin.Arsene, le 16 jui 2004 à 07:19:59

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

Répondre à Lupin.Arsene