使用时的一个想法
cvs
是通过重新使用字符串缓冲区来帮助垃圾收集器,如
/s 5 string def
s 2 cvs %...
s 66 cvs %...
但是,在循环中执行此操作时,缓冲区中实际找到的字符串是:
(-40.0)
(-30.0)
(-20.0)
(-10.0)
(0.0.0)
(10.00)
(20.00)
(30.00)
(40.00)
因此,当转换结束时,字符串似乎没有终止(可在ghostscript 9.26中找到)。不幸的是,ghostscript参考手册对字符串是否终止有点沉默。
所以问题是:
预期的行为是什么?
当你尝试像
val str dup 2 0 put cvs
结果是
==
):
(-40.0)
(-30.0)
(-20.0)
(-10.0)
(0.0\0000)
(10.00)
(20.00)
(30.00)
(40.00)
那么,重新使用字符串缓冲区到底是个坏主意吗?
更新1:
我发现放在堆栈上的值是正确的,而缓冲区中的值不是:
val s1 cvs pop % leaves the wrong value in s1
val s1 cvs /s2 exch def % leaves the correct value in s2