3

是否可以通过将指向 C 中函数分配的内存地址的指针传递给 Lua 中的堆内存的内容来访问它malloc

我试过这个:

int *j=(int *)malloc(sizeof(int));
j[0]=5;

传递(j作为指向 Lua 的指针),然后 Lua 访问指针指向的内存位置的内容j

4

2 回答 2

3

对此没有内置支持。

您可以通过将 的版本导出到 Lua 来编写自己的 C 支持,该版本将malloc内存缓冲区创建为用户数据,并提供合适的元方法以轻松访问内容。(但lua_newuserdata改用malloc.)

其中一些已经出现在 Lua 邮件列表中。参见例如

于 2013-07-18T12:08:43.523 回答
1

你究竟想做什么?您的问题似乎是关于将数据从 C 移动到 Lua。您的评论表明您希望在两个单独的进程之间共享内存。

如果您只想在 Lua 中使用一些 C,那么您应该编写和扩展(并使用userdata来移动数据)。例如,如果你有一个用 C 语言编写的库,并且你想在 Lua 中使用它,你将需要使用一个封装该库的模块来扩展 Lua。这在PIL 的第四部分中有介绍。使用扩展时,只有一个进程,因此 C 和 Lua 之间可以轻松共享内存。

如果您确实需要在两个进程之间共享数据,则需要找到某种适合您的IPC。使用套接字是一个明显的选择,因为您可以使用LuaSocket。如果你想要一个 pub/sub,那么你可以试试LCM,它同时支持 C 和 Lua。

于 2013-07-19T17:33:01.410 回答