6

再帰関数を使用している C++ プログラムの場合、この関数が占有する動的スタック サイズをどのように評価できますか?

4

2 に答える 2

7
void recursive_function()
{
  int dummy;
  cout << "stack = " << &dummy << '\n';
  ...
}

&dummyスタックの使用量が増える (またはスタックが下向きに成長する場合は落ちる) ときの rise の値を監視します。

于 2013-03-23T21:49:56.560 に答える
2
#include <stdio.h>
#include <stdlib.h>

ssize_t recurse(int limit, char* stack = NULL)
{
    char dummy;

    if (stack == NULL)
        stack = &dummy;

    if (limit > 0)
        return recurse(limit - 1, stack);
    else
        return stack - &dummy;
}

int main(int argc, char* argv[])
{
    int limit = atoi(argv[1]);
    printf("depth %d took %zd bytes\n", limit, recurse(limit));
    return EXIT_SUCCESS;
}

これを実行すると、次の4ようになります。

depth 4 took 192 bytes

他の人がコメントで示唆しているように、これは完全に移植可能ではありませんが、現在のさまざまなシステムで動作するはずです。何か「奇妙な」ことが発生した場合に備えて、結果の型は署名されていることに注意してください。確実に健全性を確認できます(たとえば、関数に他に何が含まれているかに応じて、5から500の間であることを確認してください)。

于 2013-03-23T22:15:32.073 に答える