begin process at 2012 05 30 12:06:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Structure alignment


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

Structure alignment

lundi 1 novembre 2004 à 17:05:38 | Structure alignment

Gargagol

Voilà je programme sous MS VC++
J'ai la structure suivante:

typedef struct
{
unsigned short port;
unsigned char showMessage;
unsigned char hashMonitor[16];
unsigned char hashControl[16];
}
tConfigServer;

ce qui fait un total de 35 octets.

Lorsque j'affiche le sizeof de ma struct, il affiche 36.

En mettant le structure member alignment sur 1 byte, il affiche le nombre correct 35, jusque là j'ai compris.

Mais ce que je ne comprends pas, c'est que par défaut, l'option est sur 8bytes.

Alors pourquoi est ce que ma struct fait 36octets et pas 40octets qui est le premier multiple de 8 supérieur à 35???
lundi 1 novembre 2004 à 21:01:08 | Re : Structure alignment

luhtor

Je ne programme qu'en C++, mais je comprends pas bien. Par défaut, l'alignement est sur 8 octets il me semble, et non 8 bytes. Ceci dit, ca n'explique toujours pas la valeur de 36 puisqu'il semble peut probable que tu sois encore sous windows 3.11 :)

Le problème doit venir de la fonction sizeof() faudrait savoir précisémment comment elle fonctionne.

lundi 1 novembre 2004 à 21:08:35 | Re : Structure alignment

Gargagol

euh les octets et les bytes c'est la même chose!
8 bits = 1 byte = 1 octet
lundi 1 novembre 2004 à 21:10:40 | Re : Structure alignment

luhtor

La seule explication que j'ai, quand on regarde les définitions de sizeof(): retourne le nombre d'octet UTILISES. Je vois pas d'autre explication, sizeof néglige les octets de remplissage.

De plus quand on créer un struct composé de seulement 3 char, sizeof renvoi, 3 et non 8 tel que ca devrait l'etre.

Bon reste a créer un tableau de cette structure et d'analyser l'adresse de chaque élément du tableau pour voir si la taille d'un élément c'est 3 ou bien 8.
lundi 1 novembre 2004 à 21:15:41 | Re : Structure alignment

luhtor

Ah pour moi byte était égal à bit :) encore que maintenant que tu me le dis :)

Je viens de faire le test avec un tableau, je comprend pas...
lundi 1 novembre 2004 à 23:24:02 | Re : Structure alignment

cosmobob

salut,
un char = 8 bits = 1 octet = 1 byte (byte et bit ne sont pas la meme chose, un byte etant un octet, cad 8 bits)
'De plus quand on créer un struct composé de seulement 3 char, sizeof renvoi, 3 et non 8 tel que ca devrait l'etre.'
-> du coup ca devrait plutot renvoyer 4.
c'est aussi la raison pour laquelle, dans ta premiere question, les structures devraient etre aligné sur 4 octets (et non 8), car ya des chances que ton processeur soit 32 bits (cad 4 octets). Les alignements sont effets du a la taille des registres du processeur.
ca explique que le sizeof de ta struct soit 36 (premier multiple de 4 supérieur a 35), et pas 40.

ta confusion est due au mot octet, en te disant que les structures devaient etre des multiple de 8 octets (alors que octet signifie simplement structure de 8 bits, un bit etant un 0 ou un 1).
l'alignement des structures se fait sur 32 bits ! (4 octets - la taille des registres de ton processeur - , jme repete :)

a++ ;)


Cette discussion est classée dans : char, structure, unsigned, struct, alignment


Répondre à ce message

Sujets en rapport avec ce message

struct [ par ready4 ] Je ne sais pas comment initialiser mes moteurs //intialisation moteursM1 = {2, 1, 1, 2, 0, 0, 120};M2 = {8, 4, 4, 8, 0, 0, 80};M3 = {32, 16, 16, 32, 0 envoi de paquet ip [ par sendouda ] Bonjour;j'ai écrit un programme qui permet d'envoyer des paquets ip à une destination.mais quand j'ai voulu le sniffer j'ai pas pu le capter.J'ai beso urgent:envoi paquet [ par sendouda ] Bonjour;j'ai écrit un programme qui permet d'envoyer des paquets ip à une destination.mais quand j'ai voulu le sniffer j'ai pas pu le capter.J'ai beso structure [ par logant83 ] bonjoir, enfaite voila j'aimerai pouvoir exploiter une structure mais voila j'i arrive pas. struct connect_nick { //ma structure char pseudo[1000 structures imbriquées [ par draluorg ] Salut a tous,Je recontre un probleme en creant des structures imbriquées :(Voici un exemple type de mes structures:typedef struct _SUB_SUB_SUB_STRUCTU erreur : Invalid struct or union type [ par Nico_35136 ] Bonjour, Voila , en ce moment je m'arrache les cheveux sur une allocation dynamique d'une structure en mémoire. Voici mes variable et structure que 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 Filtre de sobel [ par dwarfo ] Bonjour, je cherche à appliquer un filtre de sobel sur une image bitmap 8 bits mais sans librairies. J'ai vu qu'il existait de nombreux code mais so comment lire et ecrire un tableau de structure sur un fichier en C [ par DBA2010 ] salut à tout le monde, je suis entrain de faire un programme de gestion des étudiants,et je suis besoin de savoir comment faire pour lire et écrire u


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,530 sec (4)

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