gpt4 book ai didi

c++ - 从 C/C++ 快速检索 lua 对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:59 25 4
gpt4 key购买 nike

所有非本地 lua 对象都存储在某个表中。从表中检索对象通常意味着首先对键进行哈希计算,然后检索相应的对象。我想避免哈希计算的额外步骤。

最简单的事情(曾经是可能的)是:

lua_Object o(...some lua call...);
lua_pushobject(o);

但是,如前所述,这已经不可能了。那么,我如何快速存储然后将 lua 对象(特别是一个大表,重新创建它会很慢)推送到 lua 堆栈上?我知道注册表,但那只是另一个表,如果我从那里存储/检索,则无法避免哈希计算。

编辑:

一些细节:

lua 包装库的一个众所周知的问题是临时表问题。假设我打电话:

control:camera():get_something_else()

其中 control 是一个带有 CFunctions 的表(包装的 C++ 对象)。 camera 方法每次被调用时都会返回一个表(另一个包装的 C++ 对象)。如果我们可以缓存这个表,那就太好了,这样就不需要每次都重新创建,因为时间很紧迫(出于性能原因,我们使用 C/C++)。此外,我们不想从另一个表中查找该表,因为这意味着计算某些键的哈希值(比如将包装的 C++ 对象的实例转换为整数),以及其他查找成本。我的目标是最新的 lua 5.2 版本。

最佳答案

我已经用一个可以缓存 CFunction 结果的上值解决了这个问题;这包括一张 table 。 CFunction 可以检查上值中是否已经存在非零值。如果是这样,它只能重用现有的(上)值。访问上值不涉及任何冗长的查找。我不会接受这个答案,因为我最初问过这个问题并希望鼓励其他答案。

关于c++ - 从 C/C++ 快速检索 lua 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19831139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com