[英]How to calculate stack size for a call graph function using c code
我想计算给定callgraph函数的堆栈大小。
例如:让我说我有一个函数调用另一个函数,该函数再次调用其他函数,依此类推。
对于以上示例,如何使用GCC或MINGW或Google框架计算堆栈大小。
我需要每个函数或线程明智的堆栈大小。
请帮助我。 提前致谢。
像其他注释一样,没有确定程序堆栈大小的标准方法。 但是,您可以通过一点技巧来计算特定程序在给定平台上所需的堆栈大小。
为此,您可以跟踪任何函数中具有局部变量的最低堆栈地址。 然后,从main()函数中最后一个局部变量的地址中减去此地址,便具有最大堆栈大小(给定或取例如:100个字节用于表达式求值所需的临时堆栈变量)。
以下程序说明了这一点:
#include <stdio.h>
void * lowestStackAddress = ( void * ) 0xFFFFFFFF;
int myFunc( int n )
{
int m;
/**** remember lowest stack address ****/
if ( &m < lowestStackAddress )
lowestStackAddress = &m;
/**** do some arbitrary recursive algorithm the compiler can't optimize away ****/
if ( n == 1 )
return 1;
if ( n % 2 == 1 )
m = n * 3 + 1;
else
m = n / 2;
return myFunc( m );
}
int main ( int argc, char * argv[] )
{
int n;
void * mainStackAddress = ( void * ) &mainStackAddress;
printf( "mainStackAddress=%p\n", mainStackAddress );
n = myFunc( 5 );
printf( "Largest stack size: %d\n",
( char * ) mainStackAddress - ( char * ) lowestStackAddress );
getchar();
return 0;
}
您需要在每个不调用另一个函数本身的函数中放置检查/分配lowestStackAddress。
非常难看的骇客,我不知道这是否适用,因为您可能无法自己编译所有必需的源代码,但这只是我想到的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.