OVH Cloud OVH Cloud

Taille d'une structure.

12 réponses
Avatar
Etienne
Salut, comment peut on définir une structure afin qu'elle fasse pile
poil la taille attendue.

Par exemple

typedef struct
{
unsigned short start;
unsigned short end;
struct asmScanSprite *next_bloc;
struct asmScanSprite *next_line;
} asmScanSprite;


Sur mon linux 64 bit cette structure prend 24 octects alors que je
pensais qu'elle n'en ferai que 20 (2 + 2 + 8 + 8)

Etienne

2 réponses

1 2
Avatar
Antoine Leca
Etienne écrivit :
Le 25/06/2012 17:45, Jean-Marc Bourguet a écrit :
Certains compilateurs ont des moyens (attributs, pragma, ...) pour
indiquer qu'il ne faut pas respecter les contraintes d'alignment, quite
a payer le cout en performance.



Hum Ok.
En fait, mon problème ne permet pas la modification de la structure.



C'est généralement le cas lorsqu'on interface avec du matériel...

En gros j'ai une fonction assembleur qui me retourne une liste chainée.



... mais pas lorsqu'on interface avec une fonction en assembleur !
A priori si on se donne la peine d'utiliser le langage d'assemblage en
2012 (surtout en «linux 64 bits»), c'est parce qu'il y a des raisons de
performances qui le justifie; or si la dite fonction retourne une
structure qui ne correspond pas à l'architecture, je crois que tu vas
devoir regarder de plus près le fameux code assembleur... (et la
structure fera 24 octets en 64 bits, et tout le monde sera content).


Antoine
Avatar
Etienne
Le 26/06/2012 11:17, Antoine Leca a écrit :
je crois que tu vas
devoir regarder de plus près le fameux code assembleur... (et la
structure fera 24 octets en 64 bits, et tout le monde sera content).



Ah ben non !!!
Au lieu de

asmScanSprite *ptr = (asmScanSprite *)adress_from_assembleur;
ptr->next_bloc = null;

je vais faire

unsigned char *ptr = (unsigned char *)adress_from_assembleur;
(unsigned int *)*(ptr + 4) = null;

Enfin un truc dans le genre !!!
C'est moins sympa mais bon c'est pas grave !!!

Etienne
1 2