我一直在努力阅读这篇文章,但我找不到它。
根据标准,使用S"
创建的字符串无法修改,而在Gforth中的简单实验中,字符串的空间显然不是来自字典或填充区域:
hex
here . 7F48AB3B8758 ok
pad . 7F48AB3B8808 ok
s" test" .s <2> 77FDD0 4 ok
我希望该地址有效期多久?
换句话说,如果我将这个地址(和计数)存储在一个变量中,我可以稍后在程序中再参考它,还是需要将它移动到字典或堆中的单独位置?如果我不存储地址,我会泄漏内存吗?
答案 0 :(得分:7)
当编译成定义时,字符串的生命周期是定义的生命周期。 s"
通常仅在编译时使用。
并非所有Forths都允许使用s"
的解释时间,而ANS确实说,“这个词的解释语义未定义。”行为将至少特定于您的特定Forth。
您似乎正在使用Gforth,恰好有至少一个解释时间字符串的保留空间。 Gforth手册说,“......字符串仅在s"
的下一次调用之前存在”。它继续说,“有些Forth系统保留了不止一个这样的字符串,但通常它们的寿命有限。” (Section 3.24 Characters and Strings)。
我希望有所帮助!