: Taille d'une structure != somme de ses élements? [c] - C - Programmation
Marsh Posté le 30-07-2003 à 18:19:00
Alignement 4 octet nan ? (et donc char prend 4 au lieu d un)
Enfin ca dependra aussi du system, sous 64 bit solaris ca donne sizeof de 24 (avec alignement de 8)
Marsh Posté le 30-07-2003 à 18:19:09
ton compilateur ajoute des octets de bourrage afin de mieux aligner les champs. ça prends un peu plus de place, mais l'acces est plus rapide. ton compilateur doit avoir une option pour inhiber cet effet. certains types ont absolument besoin d'etre aligné (comme les flottants)
Marsh Posté le 03-08-2003 à 20:24:31
ReplyMarsh Posté le 03-08-2003 à 21:34:24
ça a plusieurs noms, mais en réorganisant ta structure, tu peux limiter les pertes d'alignement:
Code :
|
en fait c'est pas le "chat bit" qui génére le bourrage, mais le fait que le "unsigned long donnee" soit -après- le "char bit".
Marsh Posté le 03-08-2003 à 21:42:59
c'est une blagounette? y a déjà eu d'autres topics la dessus, et bien plus complet et vous remonter celui-là ...
Marsh Posté le 03-08-2003 à 23:30:59
BJOne a écrit : ça a plusieurs noms, mais en réorganisant ta structure, tu peux limiter les pertes d'alignement:
|
J'ai essayé, ca a fait pareil?
Marsh Posté le 03-08-2003 à 23:40:32
ben c'est que ton compilo fait du bourrage dans les deux cas. renseigne toi
un exemple avec gcc-3.3
Code :
|
[benoit@athlon tmp]$ gcc pad.c |
Marsh Posté le 03-08-2003 à 23:40:50
Taz a écrit : c'est une blagounette? y a déjà eu d'autres topics la dessus, et bien plus complet et vous remonter celui-là ... |
désolé
Marsh Posté le 04-08-2003 à 11:24:43
Sous Delphi on paut faire des "packed record" pour éviter ce problème... un équivalent existe peut être en C ...
Marsh Posté le 04-08-2003 à 15:10:40
=> #pragma pack (spécifique a chaque compilo)
Taz> qu'est-ce qui te choque avec padding ?
Marsh Posté le 04-08-2003 à 15:23:52
ReplyMarsh Posté le 04-08-2003 à 15:26:02
nempeche qd on va lire dans un fichier (qui possede une certaine structure) c bien pratique de ne pas aligner la structure en question
ou alors on rajoute des variables pour completer
Code :
|
Marsh Posté le 04-08-2003 à 15:35:50
red faction a écrit : |
je suis le seul à trouver ça très "bricolage dangereux" ?
Marsh Posté le 04-08-2003 à 15:38:57
ben 2 ou 3 bytes ca fait de mal a personne
sinon a part lespace pris en memoire je vois pas ce que ca change
qd on voit les masses prises par certains progs...
iexplore
Marsh Posté le 04-08-2003 à 15:39:44
antp a écrit : |
Nan
En + quelle taille choisir pour le dummy ? Tu peux pas le deviner vu que l'alignement des données peut-être différent suivant les compilos/plateformes.. donc RedFaction : tu sors
Marsh Posté le 04-08-2003 à 15:46:08
Oui cette histoire de padding c'est un problème lors des accès fichiers. Après, économiser la mémoire, c'est au détriment des perfs ... (comme souvent).
Marsh Posté le 04-08-2003 à 15:49:26
HelloWorld a écrit : Oui cette histoire de padding c'est un problème lors des accès fichiers. Après, économiser la mémoire, c'est au détriment des perfs ... (comme souvent). |
Y a moyen de s'arranger sans faire tant de bidouille
Marsh Posté le 30-07-2003 à 18:17:17
Bonjour !
Pour une application aux files de messages, j'ai besoin d'une structure adéquate.
J'ai remarqué que pour le code suivant :
La taille totale de la structure (via l'opérateur sizeof) était de 12 alors que la somme des parties n'était que de 9. Est-ce une généralité? Une optimisation du compilateur?
Merci !