繁体   English   中英

如何使用C代码计算调用图函数的堆栈大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM