76Fermer78
PolluxLe 23/07/2008 à 01:39
Folco (./73) :
Les autres, quepensez vous d'interdire les macros et les equates dans les fichiers sources ? L'avantage est énorme au niveau simplicité, ça permet de n'ouvrir les headers qu'en lecture seule, sans créer de table dynamique, tout ça pour un seul equ au milieu d'un source. smile Et au passage, ça accélèrerait l'assemblage (code différent pour lire un header ou un source) et réduirait de beaucoup la conso en RAM (je fais déjà tout pour que ce soit minimal).

J'attends vos avis. De mon côté, tout en explosant une pompe à vide sur un toit et en foutant en vrac mes manos cet aprè'm, je pense avoir touvé la solution pour ce que j'ai exposé en vrac hier soir grin

Si tu veux éviter de faire deux passes séparer headers et code c'est pas forcément la meilleure idée (ne serait-ce que parce que tu voudras déclarer des macros/constantes locales dans un fichier source) : mieux vaut faire comme en C où les equ doivent être définis avant d'être utilisés.

Qu'est-ce que tu entends par "ouvrir en lecture seule" ?
Sasume (./74) :
J'aimerais savoir ce qu'en pense Pollux, il me semble que pour des raisons de faible mémoire GTC assemble une fonction à la fois, pas plus, sinon la table des symboles explose.

C'est pas tellement une question de table des symboles, tout l'arbre syntaxique de la fonction est gardé en mémoire pour pouvoir faire des optimisations donc évidemment on peut pas garder le code de 50 fonctions à la fois en mémoire. Un assembleur n'est pas concerné par ce problème ^^
Folco (./75) :
tu as raison, son avis m'intéresse. Je pense particulièrement au header tios.h. Il est énorme. De touet façon, stocker toutes ses infos dans une table, plus celles éparses ici et là revient à créer un fameux doublon, ej n'en vois pas l'intérêt. Juste pour le parsing ? C'est se permetre de perdre un sacré paquet de mémoire pour quelques milisecondes...

GTC utilise des headers précompilés, pour éviter de devoir passer une éternité à tout parser et à tout stocker. Mais c'est pas nécessaire pour un assembleur : l'assembleur doit juste retenir des macros, il n'a pas à parser de prototypes -- parser un fichier comme tios.h se limite à noter les offsets du nom de l'equ et de son contenu, et zapper jusqu'à la ligne suivante (plus quelques détails comme passer les commentaires, la compilation conditionnelle, etc). Si ton fichier n'est pas compressé tu as seulement besoin de retenir ces offsets puisque tous les fichiers sont mappés en mémoire, ce qui t'amène à 4 octets par symbole (8 octets si tu stockes des pointeurs, c'est sûrement plus efficace). Et après il suffit de les organiser dans un structure efficace genre table de hash ou arbre binaire de recherche smile