1

まったく珍しい種類の質問ではありませんが、私がまだ適切な答えを見つけていない質問ではありません.

基本的に、私が作成しようとしているスレッド化されたプログラムの新しいスレッドで必要なスタック サイズを計算する方法を考え出そうとしています。

ご覧のとおり、呼び出す各関数が使用するスタックの量を決定する必要があります。次に、可能な関数呼び出しチェーンを処理して、正しいスタック サイズを決定する必要があります。

今、私が自分で書いた関数を使って、各関数が使用する変数を使用して呼び出されたときに、各関数が最大で何をスタックに置くかを理解するだけであることがわかります。

ただし、サード パーティの関数 (glibc 関数など) がスタック スペースに関してどのようなものを使用するかについては、あまり確信が持てません。また、サードパーティ関数のスタック使用に影響を与える可能性のあるすべてを分析したかどうか確信が持てないため、彼らのスタック使用状況を監視することは受け入れられないアプローチであると判断しました。必要。

したがって、私が必要としているのは、サードパーティの関数が使用する可能性のあるスタック スペースを正確に見つける方法です。

アドバイスをいただければ幸いです。

4

1 に答える 1

0

一般に、これはサード パーティ関数のソース コードがわかっている場合にのみ可能です。各関数に必要な最大スタックスペースを分析し、再帰呼び出しを検出できるツールがあります。私が職場で使用したそのようなツールの 1 つは、Gimpel の FlexeLint (Unix) == PClint (Windows) です。

于 2012-12-26T23:41:13.980 に答える