2012-09-30 13 views
6

He estado tratando de leer sobre esto, pero no puedo encontrar ninguna mención de ello.¿Cuánto dura la vida de S "..." en Forth?

Según la norma, una cadena creada con S" no se puede modificar, y desde un simple experimento en Gforth Es obvio que el espacio para la cadena no viene de diccionario o una almohadilla de las áreas:

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

¿Cuánto tiempo puedo esperar que la dirección sea válida?

En otras palabras, si almaceno esta dirección (y conteo) en una variable, ¿puedo volver a referirme a ella más adelante en el programa, o tengo que moverla a una ubicación separada en el diccionario o en el montón? Y si no almaceno la dirección, ¿perderé la memoria?

Respuesta

7

Cuando se compila en una definición, la duración de la cadena es la de la definición. s" normalmente se usa solo en tiempo de compilación.

No todos los Forth incluso permiten el uso del tiempo de interpretación de s" y, de hecho, ANS dice: "La semántica de la interpretación de esta palabra no está definida". El comportamiento será específico para su particular Forth como mínimo.

Parece que está utilizando Gforth que tiene un espacio reservado para al menos una cadena de tiempo de interpretación. El manual de Gforth dice: "... la cadena existe solo hasta la siguiente llamada de s"". Continúa diciendo: "Algunos sistemas Forth conservan más de una de estas cadenas, pero generalmente tienen una vida útil limitada". (Section 3.24 Characters and Strings).

Espero que ayude!

+0

¡Muchas gracias! Obviamente me perdí esos párrafos. Al menos eso lo deja en claro. – harald

+1

Está en lo correcto, aunque en gForth "al menos una cadena de tiempo de interpretación" en realidad significa tantas como quiera. En gForth, 'S" 'en el tiempo de interpretación asigna memoria, copia la cadena allí, y nunca la libera (está bien hacer para la interpretación). Descubrí esto escribiendo' see s "' y luego 'see save-mem'. –

Cuestiones relacionadas