对于使用递归函数的 C++ 程序,如何评估该函数占用的动态堆栈大小?
问问题
252 次
2 回答
7
void recursive_function()
{
int dummy;
cout << "stack = " << &dummy << '\n';
...
}
&dummy
随着堆栈使用量的增加(或者如果堆栈向下增长,则下降),观察上升的值。
于 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 回答