我可以让 GhostScript 使用超过 2 GB 的 RAM 吗?
Can I make GhostScript use more than 2 GB of RAM?
我是 运行 64 位版本的 GhostScript (9.50),64 位处理器,16gb 内存,Windows 7.
GhostScript returns 当我尝试分配总计超过 2 GB RAM 的过多数组时出现随机错误消息(它会告诉我数组命令中存在类型错误)。
明确地说,我在 Windows 任务监视器中看到了内存使用量的增长,而不是在 GhostScript 中
我想知道为什么会这样。
更重要的是,我想知道我是否可以覆盖此行为。
编辑:此代码产生错误 --
/TL 25000 def
/TL- TL 1 sub def
/G TL array def
0 1 TL- { dup == flush G exch TL array put }for
错误看起来像这样:这是我收到的最后一点消息
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
Unrecoverable error: typecheck in array
Operand stack: --nostringval-- ---
Begin offending input ---
/TL 25000 def /TL- TL 1 sub def /G TL array def 0 1 TL- { dup == flush G exch TL array put }for --- End offending input --- file offset = 0 gsapi_run_string_continue returns -20
RAM 的数量几乎肯定不是限制因素,但如果您 post 实际的错误消息会有所帮助。对你来说可能'random-ish',但对使用 PostScript 编程的人来说很有意义。
您很可能被其他一些内部限制绊倒了,例如 ope运行d 堆栈大小,但没有看到 PostScript 程序或错误消息,我不能说更多。我可以说(64 位)Ghostscript 将愉快地处理超过 2GB 的 RAM,我上周 运行 一个文件,其中 Ghostscript 使用 8.1GB。
请注意,PostScript 本身基本上是一种 32 位语言;虽然 Ghostscript 扩展了 PostScript 语言参考手册中记录的许多体系结构限制(例如数组和字符串中的 64K 元素),但基本未指定超出 32 位限制。
至于你是否可以改变行为,这取决于完全问题是什么,我无法从这里判断。
编辑
这是完成测试文件的 Ghostscript 运行 屏幕截图,任务管理器显示进程正在使用的内存量。未显示的是我之后从 PostScript 环境 运行 获得的 vmstatus。这表明 Ghostscript 认为它使用 10,010,729,850 字节,最大为 10,012,037,312。我的计算器显示 9,562.8MB 的大小为 10,027,322,572.4 字节,非常接近匹配。
要回答评论中的要点,这是(您可能会说)在具有大量内存的 64 位 Windows10 安装上。
差异几乎可以肯定是自 9.52 发布以来已修复的问题。 9.52 64 位二进制文件在(对我而言)5360 次迭代后确实以 VMerror 退出。显然,尝试使用大量 PostScript 内存(相对于 canvas 内存)并不常见,尤其是因为许多 PostScript 解释器根本不允许它,所以这并没有得到太多锻炼。
Ghostscript Git 存储库是 here 如果您想查看提交并尝试找出是哪一个导致了更改。你只需要回到今年3月,3月19日之前的任何东西都在9.52中。
除了单纯的好奇之外,是否有理由尝试用尽 PostScript 中的内存负载?
我是 运行 64 位版本的 GhostScript (9.50),64 位处理器,16gb 内存,Windows 7.
GhostScript returns 当我尝试分配总计超过 2 GB RAM 的过多数组时出现随机错误消息(它会告诉我数组命令中存在类型错误)。
明确地说,我在 Windows 任务监视器中看到了内存使用量的增长,而不是在 GhostScript 中
我想知道为什么会这样。
更重要的是,我想知道我是否可以覆盖此行为。
编辑:此代码产生错误 --
/TL 25000 def
/TL- TL 1 sub def
/G TL array def
0 1 TL- { dup == flush G exch TL array put }for
错误看起来像这样:这是我收到的最后一点消息
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
Unrecoverable error: typecheck in array
Operand stack: --nostringval-- ---
Begin offending input ---
/TL 25000 def /TL- TL 1 sub def /G TL array def 0 1 TL- { dup == flush G exch TL array put }for --- End offending input --- file offset = 0 gsapi_run_string_continue returns -20
RAM 的数量几乎肯定不是限制因素,但如果您 post 实际的错误消息会有所帮助。对你来说可能'random-ish',但对使用 PostScript 编程的人来说很有意义。
您很可能被其他一些内部限制绊倒了,例如 ope运行d 堆栈大小,但没有看到 PostScript 程序或错误消息,我不能说更多。我可以说(64 位)Ghostscript 将愉快地处理超过 2GB 的 RAM,我上周 运行 一个文件,其中 Ghostscript 使用 8.1GB。
请注意,PostScript 本身基本上是一种 32 位语言;虽然 Ghostscript 扩展了 PostScript 语言参考手册中记录的许多体系结构限制(例如数组和字符串中的 64K 元素),但基本未指定超出 32 位限制。
至于你是否可以改变行为,这取决于完全问题是什么,我无法从这里判断。
编辑
这是完成测试文件的 Ghostscript 运行 屏幕截图,任务管理器显示进程正在使用的内存量。未显示的是我之后从 PostScript 环境 运行 获得的 vmstatus。这表明 Ghostscript 认为它使用 10,010,729,850 字节,最大为 10,012,037,312。我的计算器显示 9,562.8MB 的大小为 10,027,322,572.4 字节,非常接近匹配。
要回答评论中的要点,这是(您可能会说)在具有大量内存的 64 位 Windows10 安装上。
差异几乎可以肯定是自 9.52 发布以来已修复的问题。 9.52 64 位二进制文件在(对我而言)5360 次迭代后确实以 VMerror 退出。显然,尝试使用大量 PostScript 内存(相对于 canvas 内存)并不常见,尤其是因为许多 PostScript 解释器根本不允许它,所以这并没有得到太多锻炼。
Ghostscript Git 存储库是 here 如果您想查看提交并尝试找出是哪一个导致了更改。你只需要回到今年3月,3月19日之前的任何东西都在9.52中。
除了单纯的好奇之外,是否有理由尝试用尽 PostScript 中的内存负载?