2012-09-30 10 views
6

Ho cercato di leggere su questo, ma non riesco a trovare alcuna menzione.Qual è la vita di S "..." in Forth?

Secondo la norma, una stringa creata con S" non può essere modificato, e da un semplice esperimento in Gforth è ovvio che lo spazio per la stringa non viene dalle zone del dizionario o pad:

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

Per quanto tempo posso aspettare che quell'indirizzo sia valido?

In altre parole, se memorizzo questo indirizzo (e il conteggio) in una variabile, posso farvi riferimento in un secondo momento nel programma o devo spostarlo in una posizione separata nel dizionario o nell'heap? E se non memorizzo l'indirizzo, perderò memoria?

risposta

7

Quando è compilato in una definizione, la durata della stringa è quella della definizione. s" viene normalmente utilizzato solo in fase di compilazione.

Non tutti gli Forth consentono l'uso a tempo di interpretariato di s" e anzi ANS afferma "La semantica dell'interpretazione per questa parola non è definita". Il comportamento sarà specifico per il tuo Forth in particolare.

Sembra che tu stia utilizzando Gforth che si trova in uno spazio riservato per almeno una stringa di interpretazione. Il manuale di Gforth dice "... la stringa esiste solo fino alla prossima chiamata di s"". Continua dicendo: "Alcuni sistemi Forth mantengono più di una di queste stringhe, ma di solito hanno una durata limitata". (Section 3.24 Characters and Strings).

Spero che questo aiuti!

+0

Grazie mille! Ho ovviamente perso quei paragrafi. Almeno questo lo rende chiaro. – harald

+1

Hai ragione, anche se in gForth "almeno una stringa di tempo di interpretazione" significa in realtà quante ne vuoi. In gForth, 'S" 'al momento dell'interpretazione assegna la memoria, copia la stringa lì e non la libera mai (va bene per l'interpretazione). L'ho scoperto digitando' see s "' e quindi 'see save-mem'. –

Problemi correlati