所有非本地lua
对象都存储在某个表中。从表中检索对象通常意味着首先对键进行哈希计算,然后检索相应的对象。我想避免哈希计算的额外步骤。
最简单的事情(曾经可能)是:
lua_Object o(...some lua call...);
lua_pushobject(o);
但是,如前所述,这不再可能了。那么,我怎样才能快速存储一个lua
对象(特别是一个大表,重新创建会很慢)然后将其推送到lua
堆栈上?我知道注册表,但这只是另一个表,如果我从那里存储/检索,则不会避免哈希计算。
编辑:
一些细节:
包装库的著名问题之一lua
是临时表问题。说我打电话:
control:camera():get_something_else()
control
带有 CFunction 的表(包装的 C++ 对象)在哪里。camera
每次调用该方法时都会返回一个表(另一个包装的 C++ 对象)。如果我们可以缓存这个表,那就太好了,这样就不需要每次都重新创建它,因为时间很关键(出于性能原因,我们使用 C/C++)。此外,我们不想从另一个表中查找该表,因为这意味着计算某个键的哈希值(例如将包装的 C++ 对象的实例强制转换为整数),以及其他查找成本。我的目标是最新lua
版本 5.2。