我有一个应用程序,我可以通过 LuaSockets 从网络 (500KB) 获取大量二进制数据。 (还没有实现这部分)。据我所知,这些数据将存储在某种字符串、表格或数组中。
我需要对这些数据进行复杂的处理,并且我有一个现有的、经过验证的 ANSI-C 库,我需要将数据传递给 C。我看过的方法通常是在调用堆栈中传递数据由于数据大小,对我不起作用。
现有的 ANSI-C 库需要一个指向数据和大小的指针。我可能可以用一个新的 API 包装这个 API,它逐字节地排除数据,最后一旦确定了整个大小就调用真正的 API 但这意味着从 Lua 对某些 C 函数的大量调用并且不是首选,因为我想要性能.
将这个大数据传递给 C 的最佳方法是什么? (我考虑过写入文件并传递文件名,但这不是首选,我真的想要直接内存传递)
最佳答案
假设 LuaSocket 以字符串形式提供数据,那么它真的很简单。
您的 C 应用程序将直接从 Lua 传递字符串。所以它在 Lua 堆栈上。使用 lua_tolstring
获取字符串及其大小。这将返回一个指向 Lua 拥有的内存的指针(因此您需要确保它保留在 Lua 堆栈或注册表中或在您使用它时的某个地方,以防止 Lua 对其进行垃圾收集)。然后将该字符串+大小传递给您选择的 API。
关于c - 将大型二进制数据从 Lua 传递到 C 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12998871/