我一直在尝试阅读有关此内容的信息,但我找不到任何提及。
根据标准,不能修改使用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/