c - 避免在 Lua 中复制字符串

标签 c performance lua

假设我有一个 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/

相关文章:

c - 将大型二进制数据从 Lua 传递到 C 的最佳方法

c++ - 为什么sizeof()编译器返回的值是依赖的?

javascript - 对象的属性访问和普通变量访问之间的速度差异是多少?

javascript - D3 : Can I get better performance when drawing and redrawing a series of rects?

java - Hibernate、JDBC 和 Java 在大中型结果集上的性能

lua - 如何将不同的成本函数应用于卷积网络的不同输出 channel ?

JavaScript、Lua、尾调用优化

c - MPI - 发送和接收矩阵行

c - 如何使用具有多个子进程的文件描述符的文件指针而不会在 C 中出现 "Bad file descriptor"错误?

c - 使用分配的空间来存储多个数组