オブジェクトに問題があり、もう必要ありませんが、まだ参照があります。結果: オブジェクトが収集されていないため、割り当てられたメモリのサイズが常に増加しています。
この種の問題を解決するにはどうすればよいですか?参照が 1 つしかないオブジェクト、またはライフタイムが特定の値よりも長いオブジェクトを見つける方法はありますか? または別の解決策はありますか?
Lua 5.1 と C++ を luabind で使用する。
ありがとう。
オブジェクトに問題があり、もう必要ありませんが、まだ参照があります。結果: オブジェクトが収集されていないため、割り当てられたメモリのサイズが常に増加しています。
この種の問題を解決するにはどうすればよいですか?参照が 1 つしかないオブジェクト、またはライフタイムが特定の値よりも長いオブジェクトを見つける方法はありますか? または別の解決策はありますか?
Lua 5.1 と C++ を luabind で使用する。
ありがとう。
誰かがここで言及しているように、弱いテーブルを使用してみることができます。
次のようなコードがある場合:
myListOfObjects = {}
...
table.insert(myListOfObject, anObject)
その後、使用が停止すると、まだ参照anObject
されているため、割り当てが解除されることはありません。myListOfObjects
参照を削除してみてください(参照を nil に設定します) が、より簡単な解決策は弱いテーブルとしてmyListOfObjects
宣言することです:myListOfObjects
myListOfObjects = {}
setmetatable(myListOfObjects, { __mode = 'v' }) --myListOfObjects is now weak
が変更するテーブルへの参照を返すことを考えるとsetmetatable
、次の短いイディオムを使用できます。これは、前の 2 行と同じことを行います。
myListOfObjects = setmetatable({}, {__mode = 'v' }) --creation of a weak table
C++ との統合については確信が持てませんが、ガベージ コレクターを実行する機会が与えられていないようです。
lua で明示的に呼び出してみて、それが役立つかどうかを確認できます。コア apis に機能がありますcollectgarbage(opt [, arg])
。