这不是一个不常见的问题,但不是我还没有找到适当答案的问题。
基本上,我试图找出如何在我打算编写的线程程序中计算新线程中所需的堆栈大小。
正如我所看到的,我需要确定我调用的每个函数使用多少堆栈,然后使用可能的函数调用链来确定正确的堆栈大小。
现在,通过我自己编写的函数,我可以看到我只是弄清楚当使用它使用的变量调用每个函数最多放入堆栈时。
然而,我不能确定的是第三方函数(例如glibc函数)将在堆栈空间方面使用。我还决定监视他们的堆栈使用情况是不可接受的方法,因为我不能确定我分析了可能影响第三方函数堆栈使用的所有内容,我也不能确定函数的新版本可能不会使用比我更多的堆栈空间必需的。
所以我需要的是一种确定任何第三方功能可以使用多少堆栈空间的方法。
建议将不胜感激。
答案 0 :(得分:0)
通常,只有在知道第三方功能的源代码时才可以这样做。有些工具可以分析每个函数所需的最大堆栈空间并检测递归调用。我在工作中使用过的一个工具是Gimpel的FlexeLint(Unix)== PClint(Windows)。