脚本和主机应用程序之间的责任分配

我一直在思考如何将 Lua 嵌入我的应用程序以用于脚本和扩展的目的。

我有一个处理对象的类,这些对象的结构类似于 Lua table (具体来说是一个 boost::any 的哈希映射)。

Lua 脚本将与这些对象及其哈希映射进行交互。

现在我开始意识到,我完全可以使用 Lua 编写这个类的全部或大部分内容(并从 C 中访问它),但我不确定这样做的后果,尤其是关于为表示哈希映射创建许多表所需的内存使用方面。

我得出这个结论的原因是,我想在这些 C 对象中存储来自 Lua 的高级结构,但这样做需要在每次将表存储到 C 对象中或从 C 对象中检索表时进行显式表序列化。理论上,这种方法在以更高的访问延迟为代价的情况下提供了较少的内存使用。

在这种情况下,可能的行动方案以及它们的优缺点是什么?

原文链接 https://stackoverflow.com/questions/6573186

点赞
stackoverflow用户312586
stackoverflow用户312586

如果我正确理解你的问题,你想要使用Lua来避免对数据进行序列化(我想是从文件读取和写入)。如果是这样的话,你可以使用Lua来实现,但是这对我来说似乎有点过度。

回答你最后的问题,Lua会占用比原生C更多的内存,并且运行速度更慢(Lua VM比原生C慢,即使你只是用C来操作从Lua到C和C到Lua的“跳转”,也会有很多的push和pop 压入和弹出操作)。

如果你想更轻松地进行序列化,可能最好使用直接序列化/反序列化到C的库。例如,json

2011-07-05 06:58:37
stackoverflow用户828255
stackoverflow用户828255

我最终决定使用 LuaJITLua 上编写大部分应用,原因如下:

  • 我通过 C/C++ 所要实现的功能在 Lua 中已经有了,特别是哈希表和元功能,我基本上是在重新发明轮子。
  • 我进行了一些简单的基准测试,发现我的大多数脚本最终会频繁地将调用弹回到 C 然后弹回到 Lua,而我可以通过限制运行时的重点,利用字节码编译器来优化掉很多这种情况。
  • 从我有限的经验和关于 JIT 编译的话题的研究中,LuaJIT(2.0.0-beta8)在这一点上已经足够快,很可能接近使用类似数据结构的 C++ 的记忆使用水平。
  • LuaJIT 也可以很好地作为普通 Lua 的替代品,易于构建;我所要做的只是链接到其库以使其运行起来。

我感到在这样做时,我会失去一些“超级用户”对项目的控制,但我认为这是由于我不熟悉 Lua 的细节而熟悉 C++ 的知识所致。

2011-09-22 01:37:04