0

我有一个用 C 编写的函数,看起来像这样

void function1(){
    if(!some_condition){
        function1();
    }
}

这是在基于 RedHat linux 的机器上的 gcc 中编译的。是否有分析工具可以告诉我代码使用的最大堆栈空间量?

4

1 回答 1

1

valgrind套件中的Massif应该会告诉您这一点。但是,您已经知道您的程序过于广泛地使用堆栈,所以我不确定使用它会对您有多大帮助。

在我看来,您应该重构您的代码。不幸的是,C 不是 Scheme,编译器不是必需的,也不做任何尾递归优化。所以重新组织你的函数可能是一个好主意,让它循环而不是递归地调用自己。这是关于堆栈和递归消除的好读物。

于 2013-08-05T10:14:31.383 回答