2

私が使用しなければならない漏れのある DLL の症状を少なくとも治す方法を探しています。ライブラリ(OpenCascade)はメモリマネージャーを提供すると主張していますが、割り当てられたメモリを解放することはまだできていません。

OCC モジュールが実行されていない間にアプリケーションがメモリを失わないようにするために、少なくともこのモジュールへの呼び出しを「サンドボックス」に入れたいと思います。

私の質問は次のとおりです。これを行うのは UGLY HACK (TM) になることは承知していますが、ライブラリによって特に使用されるメモリのストレッチを事前に割り当てたり、その周りに何らかのサンドボックスを構築したりして、私が終わったときに自分でそれらを解放するために使用したメモリの領域を追跡しますか?

または、それは醜いハックであり、そうでなければ問題を解決しようとする必要がありますか?

4

3 に答える 3

6

信頼できる唯一の方法は、ライブラリの使用を専用のプロセスに分離することです。そのプロセスを開始し、データとパラメーターを渡し、ライブラリ コードを実行して、結果を取得します。メモリ消費が許容範囲を超えたと判断したら、プロセスを再開します。

于 2010-07-05T14:15:35.317 に答える
3

壊れていないライブラリを使用する方がおそらくはるかに簡単ですが、代替が利用できない場合は、割り当て呼び出しをインターセプトしてみてください。ライブラリがそれほどひどく「最適化」されていない場合 (特に関数のインライン化)、ライブラリを逆アセンブルして、malloc 関数と free 関数を見つけることができます。ロード時に、そのアドレスをエンコードするすべての 4 (または p64 システムでは 8) バイト シーケンスを、独自のメモリ アロケータを指すものに置き換えることができます。ただし、これはバグのある読み取り不能なタイムシンクであることがほぼ保証されているため、動作する代替品が見つかった場合はこれを行わないでください。

編集:

@sharptoothの答えを見ました。これは、機能する可能性がはるかに高いです。それでも代わりを探すことをお勧めします。

于 2010-07-05T14:32:47.953 に答える
1

Roman Lygin の意見を聞くべきです - 彼は以前 occ で働いていました。彼は、メモリ管理について言及した投稿を少なくとも 1 つ持っていますhttp://opencascade.blogspot.com/2009/06/developing-parallel-applications-with_23.html

うまく質問すれば、彼は mmgt の内部構造を説明する記事を書くかもしれません。

于 2010-09-10T02:05:33.677 に答える