68Fermer70
SallyLe 15/04/2009 à 19:07
Folco > ah ok, je n'imaginais pas ça. Je ne savais même pas que ça avait une utilité d'aligner sur une adresse multiple de 8 sur TI cheeky. Je ne sais pas quelle est la meilleure solution, mais je ferais peut-être plutôt :

unsigned long PlanesHdAddr;
unsigned char* PlanesPtr; /* unsigned char = octet, ça peut être autre chose */
if (!(PlanesHdAddr = (unsigned long)Heap...
...
PlanesPtr = (unsigned char*) ((PlanesHdAddr + 7) & ~7);

ça me semble un peu plus logique/propre, mais bon ^^.

Un truc qui ne te sert pas en l'occurrence mais peut t'intéresser, c'est que si tu as un pointeur vers un type le compilateur s'arrange tout seul pour l'aligner sur une adresse permettant de lire ce type. Si je ne me trompe pas, si tu castes un pointeur void* vers int* il doit ajouter une instruction pour obtenir la parité, en particulier.
Par contre il me semble que sur TI il n'est jamais *nécessaire* d'avoir un alignement meilleur que ça donc il ne le fera sans doute jamais tout seul. Sauf peut-être avec certaines optimisations...

edit : j'ai ajouté unsigned devant long, tu devrais le faire aussi même si tu gardes ta solution. (Bon ça ne change rien pour une addition, mais bon...)

d'ailleurs quelques trucs utiles si tu joues beaucoup avec la mémoire :
typedef unsigned char byte;
typedef unsigned short word;
typedef unsigned long longword;

j'ai utilisé ça dans foblub, ça allège beaucoup hehe