6

これについて調べてみましたが、それについての言及は見つかりませんでした。

標準によると、 で作成された文字列は変更できません。GforthS"での簡単な実験から、文字列のスペースが辞書またはパッド領域から来ていないことは明らかです。

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

その住所が有効であると期待できる期間はどれくらいですか?

言い換えれば、このアドレス (およびカウント) を変数に格納した場合、プログラムの後半でそれを参照できますか? それとも、辞書またはヒープ内の別の場所に移動する必要がありますか? アドレスを保存しないと、メモリ リークが発生しますか?

4

1 に答える 1

7

定義にコンパイルされると、文字列の存続期間は定義の存続期間になります。s"通常、コンパイル時にのみ使用されます。

すべての Forth が解釈時の使用を許可しているわけではなくs"、実際、ANS は「この単語の解釈セマンティクスは定義されていません」と述べています。動作は、少なくとも特定の Forth に固有のものになります。

Gforth を使用しているように見えますが、これには少なくとも 1 つの通訳時間文字列用に予約されたスペースがあります。Gforth のマニュアルには、「...文字列は次の呼び出しまでしか存在しない」と書かれていますs"。さらに、「Fore システムの中には、これらの文字列を複数保持するものもありますが、通常、それらの文字列の有効期間は限られています。」(セクション 3.24 文字と文​​字列)。

それが役立つことを願っています!

于 2012-09-30T23:25:50.313 に答える