すべての非ローカルlua
オブジェクトは、何らかのテーブルに格納されます。通常、テーブルからオブジェクトを取得するということは、最初にキーのハッシュ計算が行われ、次に対応するオブジェクトが取得されることを意味します。ハッシュ計算の余分なステップを避けたいです。
最も簡単なことは(かつて可能だったように)次のとおりです。
lua_Object o(...some lua call...);
lua_pushobject(o);
しかし、前述のとおり、これはもはや不可能です。lua
では、オブジェクト (具体的には、再作成に時間がかかる大きなテーブル) を格納してからlua
スタックにすばやくプッシュするにはどうすればよいでしょうか? レジストリについては知っていますが、それは単なる別のテーブルです。そこから保存/取得すると、ハッシュ計算は回避されません。
編集:
いくつかの詳細:
ラッパー ライブラリのよく知られた問題の 1 つlua
は、一時テーブルの問題です。私が電話すると言う:
control:camera():get_something_else()
CFunctionscontrol
を含むテーブル (ラップされた C++ オブジェクト) はどこにありますか。このメソッドcamera
は、呼び出されるたびにテーブル (別のラップされた C++ オブジェクト) を返します。このテーブルをキャッシュできれば、時間が重要なので毎回再作成する必要がなくなります (パフォーマンス上の理由から C/C++ を使用しています)。また、別のテーブルからテーブルを検索したくありません。これは、いくつかのキー (整数にキャストされたラップされた C++ オブジェクトのインスタンスなど) のハッシュの計算や、その他の検索コストを意味するためです。lua
最新のバージョン 5.2を目指しています。