在lua中堆内存访问

时间:2013-07-18 06:20:09

标签: lua heap-memory

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

我试过这个:

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

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

2 个答案:

答案 0 :(得分:3)

没有内置支持。

您可以通过将malloc版本导出到Lua来创建内存缓冲区作为userdata,并在C中提供合适的元方法以便于访问内容,从而在C中编写自己的支持。 (但请使用lua_newuserdata代替malloc。)

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

答案 1 :(得分:2)

你真的想做什么?您的问题似乎在询问有关将数据从C移动到Lua的问题。您的意见建议您希望在两个单独的进程之间共享内存。

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

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