2012-09-30 6 views
6

J'ai essayé de lire à ce sujet, mais je ne trouve aucune mention à ce sujet.Quelle est la durée de vie de S "..." dans Forth?

Selon la norme, une chaîne créée avec S" ne peut pas être modifié, et à partir d'une expérience simple dans Gforth il est évident que l'espace pour la chaîne ne vient pas du dictionnaire ou des zones tampons:

hex 
here . 7F48AB3B8758 ok 
pad . 7F48AB3B8808 ok 
s" test" .s <2> 77FDD0 4 ok 

Combien de temps puis-je m'attendre à ce que cette adresse soit valide? En d'autres termes, si je stocke cette adresse (et ce nombre) dans une variable, puis-je la consulter plus tard dans le programme ou dois-je la déplacer vers un emplacement distinct dans le dictionnaire ou dans le tas? Et si je ne stocke pas l'adresse, est-ce que je perds la mémoire?

Répondre

7

Lorsqu'il est compilé dans une définition, la durée de vie de la chaîne est celle de la définition. s" est normalement utilisé uniquement à la compilation.

Tous les Forth n'autorisent même pas l'utilisation du temps d'interprétation de s" et ANS dit, "La sémantique d'interprétation de ce mot n'est pas définie." Le comportement sera spécifique à votre Forth à tout le moins.

Vous semblez utiliser Gforth qui possède un espace réservé pour au moins une chaîne d'interprétation. Le manuel Gforth dit, "... la chaîne existe seulement jusqu'à l'appel suivant de s"". Il poursuit en disant: "Certains systèmes Forth gardent plus d'une de ces chaînes, mais elles ont généralement une durée de vie limitée." (Section 3.24 Characters and Strings).

J'espère que cela aide!

+0

Merci beaucoup! J'ai évidemment manqué ces paragraphes. Au moins, cela est clair. – harald

+1

Vous avez raison, mais dans gForth "au moins une chaîne d'interprétation" signifie autant que vous voulez. Dans gForth, 'S" 'à l'heure de l'interprétariat alloue de la mémoire, y copie la chaîne et ne la libère jamais (pour l'interprétation), je l'ai découvert en entrant' see s ''et ensuite' voir save-mem'. –

Questions connexes