Notre calculatrice garde en mémoire ces blocs en leur assignant à chacun un numéro appelé handle ainsi qu'un pointeur. L'handle est un entier dont la taille est un mot et qui ne change plus tant que le bloc existe, et ce même si d'autres blocs sont détruits.
Comme nous venons de le dire, un pointeur (adresse) est associé à chaque handle.
Malheureusement ce pointeur est succeptible de changer quand d'autre blocs sont détruit ou redimmensionnés, ce qui peut etre fatal lors de l'execution d'un programme Fargo car le retour d'un saut pourrais ne pas se faire au bon endroit, un programme (variable) étant contenu lui-même dans un bloc mémoire dont l'adresse pourrait être changée !
David Ellsworth va résoudre ce problème dans la prochaine version de Fargo en chargeant les programmes Fargo en mémoire statique (à priori au sommet de la RAM), par conséquent que des blocs mémoire soient supprimés ou redimmensionnés ne changera en rien la position de notre programme.
Les pointeurs associés à chaque handle sont contenu dans une table pointée par la variable tios::Heap de la biblithèque TIOS.
Pour trouver l'adresse (double mot ) d'un bloc il faut utiliser la formule suivante :
adresse = ( (tios::Heap) + handle * 4 ) - 2
Si le résultat vaut zéro alors l'handle actuel ne correspond pas à un bloc.
Par contre si le résultat n'est pas nul alors vous avez le pointeur du bloc, le premier double mot correspond à la taille du bloc mémoire.
Les adresses de tous les blocs sont contenus dans une liste, le premier bloc est l'handle $0000 après ils sont disposés d'une façon désordonnée. L'adresse du prochain bloc est connue par la formule :
prochaine_adresse = adresse + (adresse).w * 2
La liste est terminée quand prochaine_adresse vaut 0.