Lua中的堆内存访问

在Lua中,能否通过将C语言中malloc函数分配的内存地址的指针传递给Lua来访问堆内存的内容?

我尝试过下面的代码:

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

通过将指针j作为参数传递给Lua,然后Lua访问由指针j指向的内存位置的内容。

点赞
用户107090
用户107090

这方面没有内置的支持。

您可以通过导出一个版本的 malloc 来编写自己的支持,以在 Lua 中创建内存缓冲区并提供合适的元方法以便轻松访问内容。(但请使用 lua_newuserdata 而非 malloc。)

在 Lua 邮件列表中出现了一些这样的示例,请参见:

2013-07-18 12:08:43
用户856565
用户856565

你实际上想做什么?您的问题似乎询问如何将数据从C移动到Lua。您的评论表明您希望在两个不同的进程之间共享内存。

如果您只想在Lua中使用一些C,则应编写扩展(并使用userdata来移动数据)。例如,如果您有一个用C编写的库,并且想在Lua中使用它,则需要使用模块扩展Lua来包装该库。这在PIL的第四部分中有介绍。在使用扩展时,只有一个进程,因此C和Lua之间的内存很容易共享。

如果您确实需要在两个进程之间共享数据,则需要找到一种适合您的IPC。使用套接字是一个明显的选择,您可以使用LuaSocket。如果您想要发布/订阅,则可以尝试LCP,它支持C和Lua。

2013-07-19 17:33:01