2012-09-30 13 views
6

Próbowałem przeczytać o tym, ale nie mogę znaleźć żadnej wzmianki o tym.Jakie jest życie S "..." w Forth?

Zgodnie z normą, ciąg utworzony z S" nie mogą być modyfikowane, a od prostego eksperymentu w Gforth to oczywiste, że przestrzeń dla napisu nie pochodzi z obszarów słownika lub podkładki:

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

Jak długo mogę oczekiwać, że ten adres będzie ważny?

Innymi słowy, jeśli przechowuję ten adres (i liczę) w zmiennej, czy mogę odnieść się do niego później w programie, czy też muszę przenieść go do oddzielnej lokalizacji w słowniku lub sterty? A jeśli nie będę przechowywać adresu, czy wycieknie z pamięci?

Odpowiedz

7

Po zestawieniu w definicję trwałość łańcucha jest tą definicją. s" jest zwykle używany tylko podczas kompilacji.

Nie wszystkie Forthy pozwalają nawet na interpretację czasu użycia s" i rzeczywiście ANS mówi: "Interpretacyjna semantyka dla tego słowa jest niezdefiniowana." Zachowanie będzie specyficzne dla twojego konkretnego Fortha przynajmniej.

Wygląda na to, że używasz Gfortha, który ma zarezerwowane miejsce na co najmniej jeden ciąg interpretacji-czasu. Instrukcja Gforth mówi: "... łańcuch istnieje tylko do następnego połączenia s"". Mówi się dalej: "Niektóre systemy Fortha przechowują więcej niż jeden z tych łańcuchów, ale zazwyczaj mają one ograniczone życie." (Section 3.24 Characters and Strings).

Mam nadzieję, że to pomoże!

+0

Wielkie dzięki! Najwyraźniej brakowało mi tych akapitów. Przynajmniej to wyjaśnia. – harald

+1

Masz rację, chociaż w gForth "przynajmniej jeden ciąg interpretacji czasu" oznacza tyle, ile chcesz. W gForth, 'S" 'w czasie interpretacji alokuje pamięć, kopiuje tam łańcuch i nigdy go nie uwalnia (w porządku do interpretacji) Odkryłem to, wpisując' see s "', a następnie 'see save-mem'. –

Powiązane problemy