是否可以通过将指向 C 中函数分配的内存地址的指针传递给 Lua 中的堆内存的内容来访问它malloc
?
我试过这个:
int *j=(int *)malloc(sizeof(int));
j[0]=5;
传递(j
作为指向 Lua 的指针),然后 Lua 访问指针指向的内存位置的内容j
。
是否可以通过将指向 C 中函数分配的内存地址的指针传递给 Lua 中的堆内存的内容来访问它malloc
?
我试过这个:
int *j=(int *)malloc(sizeof(int));
j[0]=5;
传递(j
作为指向 Lua 的指针),然后 Lua 访问指针指向的内存位置的内容j
。
对此没有内置支持。
您可以通过将 的版本导出到 Lua 来编写自己的 C 支持,该版本将malloc
内存缓冲区创建为用户数据,并提供合适的元方法以轻松访问内容。(但lua_newuserdata
改用malloc
.)
其中一些已经出现在 Lua 邮件列表中。参见例如
你究竟想做什么?您的问题似乎是关于将数据从 C 移动到 Lua。您的评论表明您希望在两个单独的进程之间共享内存。
如果您只想在 Lua 中使用一些 C,那么您应该编写和扩展(并使用userdata来移动数据)。例如,如果你有一个用 C 语言编写的库,并且你想在 Lua 中使用它,你将需要使用一个封装该库的模块来扩展 Lua。这在PIL 的第四部分中有介绍。使用扩展时,只有一个进程,因此 C 和 Lua 之间可以轻松共享内存。
如果您确实需要在两个进程之间共享数据,则需要找到某种适合您的IPC。使用套接字是一个明显的选择,因为您可以使用LuaSocket。如果你想要一个 pub/sub,那么你可以试试LCM,它同时支持 C 和 Lua。