1

Question: Y a t'il une directive ou une méthode permettant de changer l'alignement par défaut des membres d'une structure avec PureC ? (à la manière d'un #pragma pack(1) par exemple)


2

J'ai finalement opté pour une solution de dev plus moderne à savoir GCC:

http://vincent.riviere.free.fr/soft/m68k-atari-mint/

Voila le résultat : http://www.youtube.com/watch?v=8O74GgYcA3w

Pour info ce que je cherchais a faire se resume a __attribute__((__packed__)) avec gcc.
Exemple:

struct ShortDirectoryEntry {
unsigned char name[12];
unsigned char attributes;
unsigned long firstCluster;
unsigned long size;
unsigned char longName[17]; // boolean
}__attribute__((__packed__));

3

Pour info ce que je cherchais a faire se resume a __attribute__((__packed__)) avec gcc.

Attention, __attribute__((__packed__)) a aussi pour effet d'indiquer que le début de la structure peut potentiellement se trouver à n'importe quelle adresse, y-compris non multiple de 2. En conséquence, quand le programme est compilé avec -m68000 (par défaut), tous les accès aux short et long dans les structures packed sont faits avec des move.b et des décalages au lieu de move.w et move.l, même si en pratique on sait bien qu'ils seront toujours alignés ! Bonjour les perfs mourn

Avec GCC pour Atari, l'alignement maximal est de 2. Donc dans ton cas, tu peux te passer de l'attribut packed, ça marchera encore, avec les perfs maximales. C'est ce que je fais habituellement. Attention, sur la plupart des autres compilateurs l'alignement maximal est généralement plus grand (au moins 4), donc on ne peut pas se passer de l'attribut packed.
avatar
Abonnez-vous à ma chaîne Vretrocomputing sur YouTube et Facebook. Dernière vidéo : Désactiver le bip clavier en assembleur sur Atari ST.

4

Dans les versions récentes de gcc (4.x), __attribute__((__packed__)) est tout simplement ignoré, il vaut mieux ne pas l'utiliser et vérifier l'alignement des champs dans la structure.
Web: http://pmandin.atari.org/
Programmeur Linux, Atari
Spécialité: Développement, jeux