我有一个用 C 编写的函数,看起来像这样
void function1(){
if(!some_condition){
function1();
}
}
这是在基于 RedHat linux 的机器上的 gcc 中编译的。是否有分析工具可以告诉我代码使用的最大堆栈空间量?
valgrind套件中的Massif应该会告诉您这一点。但是,您已经知道您的程序过于广泛地使用堆栈,所以我不确定使用它会对您有多大帮助。
在我看来,您应该重构您的代码。不幸的是,C 不是 Scheme,编译器不是必需的,也不做任何尾递归优化。所以重新组织你的函数可能是一个好主意,让它循环而不是递归地调用自己。这是关于堆栈和递归消除的好读物。