假设我有一个 C 程序,它想用两个字符串调用一个非常简单的 Lua 函数(假设两个逗号分隔的列表,如果列表完全相交则返回 true,否则返回 false)。
最明显的方法是使用 lua_pushstring 将它们压入堆栈。 ,它工作正常,但是,从文档来看,它看起来像 lua_pushstring,但会复制字符串供 Lua 使用。
这意味着要跨越到 Lua 函数将需要两个字符串副本,我可以通过在 C 中重写 Lua 函数来避免。有没有办法安排事情,以便现有的 C 字符串可以在 Lua 端重用为了性能(或者 strcpy 成本无论如何都会变得微不足道)?
从我目前的调查来看(我最初几个小时认真研究 Lua),lite userdata似乎是我想要的那种东西,但是以字符串的形式。
最佳答案
不可以。当你调用 lua_pushstring()
时,你不能禁止 Lua 复制字符串。 .
原因:除非,内部garbage collector将无法释放未使用的内存(例如您的 2 个输入字符串)。
即使您使用轻量级用户数据功能(在这种情况下这将是一个矫枉过正),您也必须使用 lua_pushstring()
稍后,当 Lua 程序要求输入字符串时。
关于c - 避免在 Lua 中复制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2855475/