Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2999 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  pb de taille de structure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb de taille de structure

n°247254
blackgodde​ss
vive le troll !
Posté le 17-11-2002 à 22:23:31  profilanswer
 

Bonjour,  
 
soit
 
typedef struct SERVERHEADER
{
 signed long Version;
 unsigned char ID;
} *PSERVERHEADER;
 
sizeof(SERVERHEADER) = 8
 
sizeof(signed long) = 4 et sizeof(unsigned char) = 1
 
je comprends aps ou sont les 3 octets pour passer de 5 à 8 ???


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 17-11-2002 à 22:23:31  profilanswer
 

n°247255
charlene
Verba volant, scripta manent
Posté le 17-11-2002 à 22:24:52  profilanswer
 

c'est p-e un problème d alignement non ?


Message édité par charlene le 17-11-2002 à 22:25:22
n°247258
Kristoph
Posté le 17-11-2002 à 22:26:28  profilanswer
 

C'est du padding. Les compilateurs mettent pratiquement toujours ca pour alligner la taille des structures sur des multiples de 4 octets.
 
Parfois même, si tu fais ca :

Code :
  1. struct toto
  2. {
  3. char a;
  4. int b;
  5. char c;
  6. };


Tu te retrouves avec une structure de 12 octets car il ajoute 3 octets bidon entre le a et le b pour que le b se trouve alligné sur une addresse multiple de 4 lui aussi.


Message édité par Kristoph le 17-11-2002 à 22:26:57
n°247266
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 22:31:14  profilanswer
 

exactemement c'est tout a fait normal et ca permet un acces memeoire plus rapide (acces direct, pas besoin, de faire un decalage, cela assure aussi que les variables qui ont une taille inférieure ou egale a celle d'un mot-mémoire seront effectivement stockées sur seul mot mémoire)


---------------
du bon usage de rand [C] / [C++]
n°247287
blackgodde​ss
vive le troll !
Posté le 17-11-2002 à 22:52:43  profilanswer
 

et y a-t-il une solution pour avoir qd mm ma struct qui fasse 5 octets ? (la déclarer avec qq chsoe de spécial, qqchose comme ca ?)


---------------
-( BlackGoddess )-
n°247288
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-11-2002 à 22:55:16  profilanswer
 

Désactiver l'alignement des données dans les options du compilateur (le mettre sur 1 octet)
 
ex dans C++Builder:
 
http://ibelgique.ifrance.com/antp/_images/dataalign.png
 
note qu'il vaut mieux le laisser sur double word (4 octets) pour des questions de performances il me semble...


Message édité par antp le 17-11-2002 à 22:58:12

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°247293
blackgodde​ss
vive le troll !
Posté le 17-11-2002 à 22:57:09  profilanswer
 

ouille aie aie c ou ca ... personne sait sous vc++6 ?


---------------
-( BlackGoddess )-
n°247295
blackgodde​ss
vive le troll !
Posté le 17-11-2002 à 23:01:33  profilanswer
 

c le compilo ou le linker qui fait ca ?


---------------
-( BlackGoddess )-
n°247296
Kristoph
Posté le 17-11-2002 à 23:01:50  profilanswer
 

C'est le compilateur.

n°247297
blackgodde​ss
vive le troll !
Posté le 17-11-2002 à 23:07:30  profilanswer
 

je trouve pas sous vc++, align c une option du linker pour la taille des section, ca plante des kon le change, mais a part ca je trouve rien :(


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 17-11-2002 à 23:07:30  profilanswer
 

n°247298
blackgodde​ss
vive le troll !
Posté le 17-11-2002 à 23:19:52  profilanswer
 

ayé c bon g trouvé :)
 
pour ceux que ca interresse, sous vc++ il faut mettre '/Zp1' ds les options du compilo


---------------
-( BlackGoddess )-
n°248061
fabsk
Posté le 18-11-2002 à 22:41:04  profilanswer
 

BlackGoddess a écrit a écrit :

ayé c bon g trouvé :)
pour ceux que ca interresse, sous vc++ il faut mettre '/Zp1' ds les options du compilo




 
Fait pas ca malheureux :) Petit optimisation du jour: tu laisses l'alignement par défaut propice aux optimisations, et tu déclares ta structure comme ceci (Specifique à VC++):
 
#pragma pack (push, 1)
 
struct Toto{
[...]
};
 
#pragma pop
 
Tada !

n°248184
blackgodde​ss
vive le troll !
Posté le 19-11-2002 à 08:18:06  profilanswer
 

ah super !!!! a quoi ca sert les #pragman push, #pragma pop en règle générale ?


---------------
-( BlackGoddess )-
n°248242
fabsk
Posté le 19-11-2002 à 11:19:12  profilanswer
 

BlackGoddess a écrit a écrit :

ah super !!!! a quoi ca sert les #pragman push, #pragma pop en règle générale ?




 
MSDN est ton copain :-)
"#pragma" permet d'utiliser des commandes spécifiques au compilateur. Donc c'est pas portable.
 
"#pragma pack" permet de changer l'alignement par défaut du projet ou du fichier.
 
avec "push" et "pop" du change l'alignement et puis tu remets l'ancien (que tu ne connais pas).

n°248271
blackgodde​ss
vive le troll !
Posté le 19-11-2002 à 12:02:51  profilanswer
 

ok, super :) merci


---------------
-( BlackGoddess )-
n°248424
YungMakko
Posté le 19-11-2002 à 14:40:32  profilanswer
 

BlackGoddess a écrit a écrit :

je trouve pas sous vc++, align c une option du linker pour la taille des section, ca plante des kon le change, mais a part ca je trouve rien :(




 
Dans Visual 6:
 
Project Settings, onglet C++, selectionner "code generation" dans la première combo, tu as un champ "struct member alignment"


---------------
In tartiflette, we trust!
n°248530
blackgodde​ss
vive le troll !
Posté le 19-11-2002 à 16:02:37  profilanswer
 

ah mais c terrible ya plein de maniere lol :p j enote tout :)


---------------
-( BlackGoddess )-
n°248552
YungMakko
Posté le 19-11-2002 à 16:13:16  profilanswer
 

BlackGoddess a écrit a écrit :

ah mais c terrible ya plein de maniere lol :p j enote tout :)




 
En fait c'est toujours la même manière: Le fait de changer des settings via l'interface graphique, revient à changer des champs dans la ligne de commande de compilation...et inversement, si tu changes dans la ligne de commande, tu verras que les valeurs des controls depuis les pages de settings changent aussi.


---------------
In tartiflette, we trust!
n°248581
blackgodde​ss
vive le troll !
Posté le 19-11-2002 à 16:25:59  profilanswer
 

ah, donc ya 2 manieres alors : les settings du compilo directement ou les #pragma direct ds le code :)


---------------
-( BlackGoddess )-

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  pb de taille de structure

 

Sujets relatifs
Taille de fichier?[Delphi6]menu deroulant probleme de taille
[HTML] taille optimale pour une page internet[PHP]taille de texte
structure d'une base de donnés sql pour un forum et fonctions innovantreduction de taille PHPSESID
[HTML] Le texte est il limité a 7 en taille?comment recuperer la taille de la console en c sous linux?
[html] form ds un tableau change sa taille ...Créer un tableau de structure de la taille de l'entier "i"
Plus de sujets relatifs à : pb de taille de structure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR