187Fermer189
Lionel DebrouxLe 20/04/2009 à 09:16
C'est difficile de répondre de manière exhaustive ET courte à ton post grin
Le tutorial TICT S1P9 (dans le SVN ExtGraph, mais il n'a pas dû changer depuis 2.00 Beta 5) contient quelques infos là-dessus.

Premièrement: est-ce que tu veux TOUT stocker, y compris des choses que tu pourrais mettre en arguments des fonctions, dans ta struct ?
C'est le style d'architecture mémoire partagée: communication par les variables globables. L'avantage principal est l'efficacité, mais ça réduit la debuggabilité et la maintenabilité.

Passer un argument supplémentaire (un pointeur vers la struct) aux fonctions est tolérable, mais passer trop d'arguments aux fonctions est une très mauvaise idée pour l'efficacité et la maintenabilité. Voir Pinball89.
Si tu ne veux pas passer un argument supplémentaire à tes fonctions, plusieurs solutions:
* tu peux déclarer la variable externe et c'est tout, sans utiliser d'adressage direct par rapport à un registre. C'est ce que font la plupart des programmes de TICT (qui n'utilisent en général pas une struct pour stocker les variables principales, mais plusieurs variables globales). Les accès en lecture peuvent être pc-relatifs, pas ceux en écriture (xxx.l relogés).
* tu peux mettre la variable externe en tant que global register variable (dont l'adresse est initialisée au début du programme, d'une manière ou d'une autre). Accès reg-relatifs non relogés en lecture ET en écriture. J'ai utilisé cette solution quelques fois, je sais que Flanker l'a fait aussi dans son shell (avec a6, il me semble).
* tu peux compiler tout ton programme en register relative (-freg-relative-an), qui permettra d'avoir, en plus des accès reg-relatifs non relogés en lecture ET en écriture, des jumps reg-relatifs non relogés.


N'hésite pas à demander plus de détails grin
Là, j'ai surtout mentionné les options qui s'offrent à toi, et peu la façon de les utiliser.