我有很多 lua 脚本,它们的名称与函数名称相同(用于“入口点”),我想运行它们。但我想尽快完成。
经过一些浏览/谷歌搜索/思考后,我有两个解决方案。
1.,我有一个主要的lua_State。我将所有必要的给定和我自己的库/函数“加载”到其中。接下来我 lua_dump() 当前 lua 脚本的 lua_State 函数(使用链表作为 chunck 容器),然后我 lua_load() 到主 lua_State,然后 lua_call() 到主 lua_State。使用此解决方案,我不必为所有脚本加载所有库。所以主要的lua_State是一个“环境”。 :)
2.,我只是为所有 lua_State 加载库。然后 lua_call() 它们。
问题是:即使第一个逻辑正确吗?如果是,您会使用哪一个?有更好的解决方案吗?
先谢谢了,对不起我的英语不好。
(如果第一个真的是正确的,是否存在一些不经意的优化可能性?)
最佳答案
正如您所说,我不明白您为什么想要超过 1 个 Lua 状态。如果你只有一个 Lua 状态,那么所有的开销就是加载库(一次),然后从你运行的脚本中加载函数(一次,除非你需要从文件中“刷新”它们)。所以只需要 1 个状态,然后dofile
脚本。
如果你真的需要那些多个 lua_States,你可以只加载你需要的库,如解释的那样 in the Lua Reference Manual, in the paragraph just above 5.1
在 Lua Gems Book 中还有一章关于 Lua 代码优化的不错的免费章节。 .
关于c - 复制lua函数的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348552/