我一直在尝试阅读此内容,但我找不到任何提及它的内容。
根据该标准,用S"
创建的字符串不能修改,从 Gforth 中的简单实验中可以明显看出字符串的空间不是来自字典或键盘区域:
hex
here . 7F48AB3B8758 ok
pad . 7F48AB3B8808 ok
s" test" .s <2> 77FDD0 4 ok
我可以预期该地址的有效期是多久?
换句话说,如果我将此地址(和计数)存储在变量中,我可以稍后在程序中引用它,还是需要将其移动到字典或堆中的单独位置?如果我不存储地址,我会泄漏内存吗?
编译到定义中时,字符串的生存期是定义的生存期。 s"
通常仅在编译时使用。
并非所有的Forths都允许解释时使用s"
,事实上ANS说,"这个词的解释语义是不确定的。该行为至少将特定于您的特定 Forth。
您似乎正在使用 Gforth,它恰好为至少一个解释时间字符串保留了空间。Gforth手册说:"...该字符串仅在下一次调用 s"
" 之前存在。它接着说,"一些Forth系统保留了不止一个这样的字符串,但通常它们的寿命仍然有限。(第 3.24 节 字符和字符串)。
我希望这有所帮助!