6

我一直在尝试阅读此内容,但找不到任何提及。

根据标准,S"不能修改创建的字符串,从Gforth中的一个简单实验可以看出,字符串的空间不是来自字典或填充区域:

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

我可以期望该地址在多长时间内有效?

换句话说,如果我将这个地址(和计数)存储在一个变量中,我可以稍后在程序中引用它,还是需要将它移动到字典或堆中的单独位置?如果我不存储地址,我会泄漏内存吗?

4

1 回答 1

7

当编译到定义中时,字符串的生命周期就是定义的生命周期。s"通常仅在编译时使用。

并不是所有的 Forths 甚至都允许在解释时使用,s"而且 ANS 确实说,“这个词的解释语义是未定义的”。该行为至少是特定于您的特定 Forth 的。

您似乎正在使用 Gforth,它恰好为至少一个解释时间字符串保留了空间。Gforth 手册说,“......字符串只存在到下一次调用s"”。它继续说,“一些 Forth 系统保留多个这些字符串,但通常它们的寿命仍然有限。” (第 3.24 节字符和字符串)。

我希望这会有所帮助!

于 2012-09-30T23:25:50.313 回答