Каково время жизни S в Форте?

Я пытался прочитать об этом, но я не могу найти никаких упоминаний об этом.

Согласно стандарту, строка, созданная с помощью S", не может быть изменена, и из простого эксперимента в Gforth очевидно, что место для строки берется не из области словаря или пэда:

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

Как долго я могу ожидать, что этот адрес будет действительным?

Другими словами, если я сохраняю этот адрес (и количество) в переменной, могу ли я вернуться к нему позже в программе или мне нужно переместить его в отдельное место в словаре или куче? И если я не сохраню адрес, не будет ли утечки памяти?


person harald    schedule 30.09.2012    source источник


Ответы (1)


При компиляции в определение срок жизни строки равен сроку жизни определения. s" обычно используется только во время компиляции.

Не все Форты даже позволяют использовать s" во время интерпретации, и действительно, ANS говорит: «Семантика интерпретации для этого слова не определена». Поведение будет специфичным для вашего конкретного Форта, по крайней мере.

Похоже, вы используете Gforth, в котором есть зарезервированное пространство по крайней мере для одной строки времени интерпретации. В руководстве Gforth сказано: "... строка существует только до следующего вызова s"". Далее говорится: «Некоторые системы Forth хранят более одной из этих строк, но обычно они имеют ограниченный срок службы». (Раздел 3.24. Символы и строки).

Надеюсь, это поможет!

person AshleyF    schedule 30.09.2012
comment
Большое спасибо! Я явно пропустил эти абзацы. По крайней мере, это проясняет. - person harald; 01.10.2012
comment
Вы правы, хотя в gForth по крайней мере одна строка времени интерпретации фактически означает столько, сколько вы хотите. В gForth S" во время интерпретации выделяет память, копирует туда строку и никогда не освобождает ее (хорошо для интерпретации). Я обнаружил это, набрав see s", а затем see save-mem. - person Ben Hoyt; 16.11.2012