OP_JMP 操作码的可扩展性

我的应用程序使用了定制版的 Lua 5.0.2,并且一些客户会输入非常大的(自动生成的)脚本。例如,大小为200兆字节或更大的脚本。它们似乎都能正常工作,但我想知道 Lua VM 的可扩展性如何。

我特别关注的是 OP_JMP 的可扩展性。在 Lua 5.0.2 中,OP_JMP 使用 18 位来编码目标 PC。因此,它最多可以跳过 262144 条指令。这个限制会对非常大的脚本产生问题吗?例如,一个大小为 200 兆字节的脚本,在脚本底部调用了脚本顶部的一个函数?这会触发 OP_JMP 的限制吗?还是函数调用以不同的方式实现,OP_JMP 仅用于编码控制结构,如 forif 等,这些结构很少需要跳过超过 2^18 条指令...

感谢任何能够解决这个问题的人!

点赞