2017-12-02 2 views
1

私は、再帰関数のパラメータに基づいて、再帰関数の特定のスタックフレームが使用する、バイト単位などのメモリ量を計算できるか、少なくとも近似したいと考えています。どのように再帰関数のスタックフレームで使用されるメモリを計算/近似できますか?

例えば、 のsample_recursive_function(int [] array、int n)のような再帰関数のスタックフレームがどれくらいのメモリを占有する可能性がありますか?

+1

特定の言語でタグ付けできますか?私はC/C++やJavaを推測しています。 –

+0

私は主にJavaに興味があります –

答えて

1

引数のサイズに定数戻りアドレスサイズを加えた値で近似できます。 int []はポインタ型(java、C++またはC#の場合)で、4または8バイト(コードが32または64ビットで実行されるかどうかによって異なります)、intは4バイト、戻り値は4バイトです。アドレスも4または8バイトです。したがって、この関数の最適化されたスタックフレームは、32ビットで12バイト、64ビットで32バイト(パディングのため)になります。デバッグモードで実行しているときは、いくつかの余分なバイトが使用される可能性があります。また、関数内のローカル変数もスタックフレームのサイズに加算されます。詳細は少し複雑かもしれません。

+1

スタックフレームで使用されるメモリの量は、パラメータのデータ型に使用されるメモリ量と、ローカル変数やリターンアドレスサイズのような他の定数です。 –

+1

@sidharthramanan:正しい。ローカル変数は定数ではありませんが、それ以外は定数です。実際には、それらが指し示すオブジェクトのサイズではなく、変数のサイズだけであることに注意してください。したがって、クラス型への参照変数は、4または8バイトしか使用しません。 – PMF

関連する問題