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

根据标准,不能修改使用S"创建的字符串,并且通过Gforth中的简单实验,很明显,该字符串的空间并非来自字典或填充区域:

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

我希望该地址有效多长时间?

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

最佳答案

编译为定义时,字符串的生存期即为定义的生存期。 s"通常仅在编译时使用。

并非所有的Forth甚至都允许在解释时使用s",并且ANS确实说:“该单词的解释语义未定义。”该行为至少将特定于您的特定Forth。

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

希望对您有所帮助!

关于memory-management - Forth中S“…”的生命周期是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12659584/

10-10 00:25