我有一个应用程序,我通过LuaSockets从网络(500KB)获得大型二进制数据.(尚未实现此部分).根据我所知,这些数据将存储在某种String或表或数组中.
我需要对这些数据进行复杂的处理,并且我有一个现有的,经过验证的ANSI-C Lib,我需要将数据传递给C.我看过的方法通常会传递调用堆栈中的数据,这将无法工作对我来说由于数据大小.
现有的ANSI-C lib需要一个指向数据和大小的指针.我可以用一个新的API包装这个API,它逐字节排除数据,最后一旦建立整个大小调用真正的API,但是这意味着从Lua调用一些C函数的大量调用,因为我想要性能.
将这些大数据传递给C的最佳方法是什么?(我考虑过写入文件并传递文件名,但这不是首选,我真的想要一个直接的内存传递)
假设LuaSocket提供数据作为字符串,那么它非常简单.
您的C应用程序将直接从Lua传递字符串.所以它在Lua堆栈上.使用lua_tolstring得到的字符串,它的大小.这将返回一个指向Lua拥有的内存的指针(所以你需要确保它保留在Lua堆栈或注册表中或某个地方,当你使用它时,以防止Lua垃圾收集它).然后将该字符串+大小传递给您选择的API.