1

不完全是一个不常见的问题,但不是一个我还没有找到适当答案的问题。

基本上,我正在尝试研究如何在我打算编写的线程程序中计算新线程中所需的堆栈大小。

如我所见,我需要确定我调用的每个函数使用多少堆栈,然后使用可能的函数调用链来确定正确的堆栈大小。

现在,使用我自己编写的函数,我可以看到我只是计算出每个函数在使用它使用的变量调用时最多会放入堆栈中的内容。

但是,我不能确定的是第三方函数(例如 glibc 函数)将在堆栈空间方面使用什么。我还决定监视他们的堆栈使用不是一种可接受的方法,因为我不能确定我分析了可能影响第三方函数堆栈使用的所有内容,我也不能确定较新版本的函数可能不会使用比我更多的堆栈空间必需的。

所以我需要一种方法来准确找到任何第三方函数可以使用多少堆栈空间。

建议将不胜感激。

4

1 回答 1

0

通常,这只有在第三方功能的源代码已知时才有可能。有一些工具可以分析每个函数所需的最大堆栈空间并检测递归调用。我在工作中使用的这样一种工具是 Gimpel 的 FlexeLint (Unix) == PClint (Windows)。

于 2012-12-26T23:41:13.980 回答