私はLuaでいくつかのアルゴリズムを開発しています。これらは主にLuaで実行され(C ++への呼び出しはほとんどありません)、デフォルトのLuaインタープリターではなくアプリから実行すると、大幅な速度低下に気づきます。スクリプトはインタプリタで約11秒、プログラムで約5 分以上で戻ります。
C ++関数の呼び出しに問題があるとは思わない。スクリプト内の空の関数でその関数を無効にしても、時間に対する顕著な影響はない。
Luaとプログラムの両方がVisual Studio 2010でコンパイルされている(私はLuaの新しいソリューションを作成し、インタープリターと静的ライブラリの両方のプロジェクトを作成しました)
私はコードでプロファイラーを実行しました(Very SleepyプロファイラーはLuaプロファイラーを動作させることはできませんが、あまり試みていません)。私のアプリケーションでは、時間の約50%がmallocに費やされています。両方ともLuaガベージコレクターから呼び出され、40%が無料です(これをチェックして無効にしようとしましたが、大量のメモリを使用すると(当然)、Luaインタープリターが約4MBのRAM使用率でピークします)。
私はLuaの初心者なので、どこかで何か間違ったことをした可能性があります。誰かがいくつかのヒントを試してみましたか?
malloc!諸悪の根源!Luaを最初に調査したときに同様の問題に遭遇し、その努力を放棄したので、解決策があるかどうか知りたいです。
—
Crashworks
luaのデフォルトのメモリハンドラをreallocを使用するものに変更する提案はありませんでした。しかし、それは約3年前のことです。Luaをどのようにバインドしますか?Luabindを使用する場合は、メソッドを直接バインドする場合、またはおそらくtoLuaと比較する場合と比べて、関数呼び出しのオーバーヘッドがかなり大きくなります。
—
LearnCocos2D 2010年
LuaのGCを最適化するための推奨事項を試しましたか?lua-users.org/wiki/OptimisingGarbageCollection
—
David Young
@DavidYoung私はそれを少し最適化しようとしましたが、両方で約15%速くなりました。速度の大きな違いを実際に説明するものは何もありません
—
Elva
@GamingHorrorがコールスタックを振り返ると、mallocがreallocから呼び出されているように見えます(luaV_execute-> luaM_realloc _-> l_alloc-> realloc-> malloc)。また、Lua C apiを直接使用し、少しのユーザーデータを使用しています呼び出す必要がある1つのクラス。
—
Elva