在Forth,S“......”的生命是什么时候?

时间:2012-09-30 07:42:55

标签: memory-management forth

我一直在努力阅读这篇文章,但我找不到它。

根据标准,使用S"创建的字符串无法修改,而在Gforth中的简单实验中,字符串的空间显然不是来自字典或填充区域:

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

我希望该地址有效期多久?

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

1 个答案:

答案 0 :(得分:7)

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

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

您似乎正在使用Gforth,恰好有至少一个解释时间字符串的保留空间。 Gforth手册说,“......字符串仅在s"的下一次调用之前存在”。它继续说,“有些Forth系统保留了不止一个这样的字符串,但通常它们的寿命有限。” (Section 3.24 Characters and Strings)。

我希望有所帮助!