是否可以通过向C中传递指向由malloc
函数分配的内存地址的指针来访问Lua中堆内存的内容?
我试过这个:
int *j=(int *)malloc(sizeof(int));
j[0]=5;
传递(j
作为指向Lua的指针),然后Lua访问指针j
指向的内存位置的内容。
答案 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。