递归函数占用的堆栈大小维度

时间:2013-03-23 21:47:45

标签: c++

对于使用递归函数的C ++程序,如何评估此函数占用的动态堆栈大小?

2 个答案:

答案 0 :(得分:7)

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

随着堆栈使用量的增加(或者如果您的堆栈向下增长而下降),请注意&dummy的值上升。

答案 1 :(得分: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之间,具体取决于您的函数包含的其他内容)。