使用Luajit时,使用FFI或普通的lua绑定是否更好?

ben*_*bot 5 c++ scripting lua ffi luajit

我刚开始使用C++修改Luajit,我发现它的FFI非常易于使用,但我不确定它是否是所有(或至少大多数)案例的最佳解决方案.

那么使用其中一个更好,还是仅仅是偏好?

W.B*_*.B. 11

正如在LuaJIT网站上所述,对通过FFI绑定的C函数的调用可以进行JIT编译(而不是通过Lua C/API调用),因此在性能方面,FFI肯定更好.此外,使用FFI,您可以使用本机C类型在Lua中进行计算,这可以在某些情况下进一步提高性能(示例).

使用FFI时可以遇到的一个问题(如果您习惯使用C/API)就是希望C函数返回多个值.在Lua C/API中,这很简单,但在FFI的情况下,这需要一些技巧(例如,为FFI C调用编写包装函数).但我认为考虑到易用性和性能,这是一个小缺点.

如果您的应用程序允许第三方脚本编写,还有一些安全注意事项,例如,因为误用FFI会很快崩溃您的应用程序而不会发出警告.

  • 是的,但这实际上是FFI和C/API之间的区别.在Lua C API的情况下,您在C侧定义绑定,而在FFI的情况下,您可以从Lua侧定义它们.在那里你可以改变全局变量. (2认同)