如何预编译传递给 luaL_loadbuffer() 的 Lua?

How can I pre-compile the Lua that I pass to luaL_loadbuffer()?

我正在使用 Lua "C" API 函数 luaL_loadbuffer() 来运行 Lua 代码。

我有一小部分 Lua 块,我调用了很多很多次。但是每次我调用 luaL_loadbuffer() 块都会重新编译。这似乎非常低效。 chunk 引用的大部分代码都是预编译的,但为什么每次都需要重新编译 chunk 本身呢?我怎样才能避免这种重新编译?

我可以将预编译块传递给 luaL_loadbuffer() 吗?

我可以制作返回的 Lua 堆栈的完整副本并重新使用吗?

还有其他聪明的方法吗?

使用luaL_loadstring加载你用luac预编译的二进制块。但要注意 - 这些二进制文件不能跨平台或 Lua 版本移植。

继续使用luaL_loadbuffer加载脚本。 Load这里的意思是预编译。只需将留在堆栈中的函数保存在程序中的某处(或者如果可以的话,将其留在堆栈中)。到时候运行一个脚本,lua_pushvaluelua_pcall就可以了。