避免在Lua中进行字符串复制

Mat*_*ard 2 c performance lua

假设我有一个C程序想要用两个字符串调用一个非常简单的Lua函数(假设两个逗号分隔的列表,如果列表相交则返回true,否则返回false).

显而易见的方法是使用lua_pushstring将它们推送到堆栈上,但是,从文档看起来像lua_pushstring可以正常工作,但是为Lua创建了一个字符串的副本.

这意味着要交叉到Lua函数将需要两个字符串副本,我可以通过重写C中的Lua函数来避免.有没有办法安排事情,以便现有的C字符串可以在Lua端重用表演的缘故(或者说,无论如何,strcpy的成本都会变得微不足道)?

从我到目前为止的调查(我的前几个小时认真看待Lua),lite userdata看起来像我想要的东西,但是以字符串的形式.

ulr*_*chb 6

不能lua_pushstring().当你打电话时,你不能禁止Lua制作一个字符串副本.

原因:除非,内部垃圾收集器无法释放未使用的内存(如2输入字符串).

即使您使用轻量级用户数据功能(在这种情况下这也是一种过度杀伤)lua_pushstring(),当Lua程序要求输入字符串时,您将不得不稍后使用.