4

Visual C++ 2010 で記述されたシミュレーション エンジンがあり、別のサード パーティ アプリケーション用に、それに基づく DLL プラグインを実装しています。

ただし、ライブラリがサードパーティ アプリのスレッドによって呼び出されると、スタック オーバーフロー エラーが発生します。デバッグ後、DLL にはスレッドよりも大きなスタック サイズが必要であることが判明しました。どうにかして現在のスレッドのスタック サイズを拡張することは可能ですか?

シミュレーション エンジンのコードを見直して、大きなオブジェクトをヒープに移動する必要があることはわかっています。問題は、エンジンが別のベンダーによって保守されていることであり、可能であればそのコードを変更したくありません。

より大きなスタック サイズで DLL 内に独自のスレッドを作成し、計算が終了したら呼び出し元のスレッドに結果を返すことを考えています。それは正しいアプローチですか?

ありがとう、ミハル

4

3 に答える 3

0

最初に確認することは、実際に使用しているスタック スペースの量です。スタックに大きなオブジェクトを割り当てていますか? あなたのプログラムは再帰の深さをかなり利用していますか? DLL にリンクできるテスト フック アプリケーションを作成し、使用するスタック領域を確認します。

スタックに大きなオブジェクトを割り当てる場合は、それらをヒープに移動することを強くお勧めします。

大幅な再帰を行っている場合は、アプリケーションのスタックに依存するのではなく、DLL によって維持されるヒープベースのスタックを使用してループを使用して調査することをお勧めします。

私がこれらの提案をするのは、プラグインが自己完結型であり、特別なスタック構成 (または、より大きなスタックを持つためだけに完全に別のスレッドでさえ) を必要としない方が邪魔にならないからです。

于 2014-06-10T16:02:24.627 に答える