代码运行在同一进程中共享栈空间,此方法可统计同一进程中运行代码的栈消耗
首先,申请一个比较大的栈数组然后初始化为特定值,作为栈空间初始化,该初始化函数在程序的一开始调用,如下申请100*1000大小的栈空间初始化为0x96
static void stack_init()
{
unsigned char stack_mem[100*1000]={0};
memset(stack_mem,0x96,100*1000);
g_stack_low = stack_mem;
printf("FUNC:%s,stack_mem=%p,stack_mem+100*1000=%p",__func__,stack_mem,stack_mem+100*1000);
}
然后,自定义函数统计栈空间被使用了多少,该函数可在程序运行结束之前调用
void stat_stack(const char* func,unsigned char* p)
{
int i;
int cnt = 0;
static int g_stack_mem = 0;
for(i=0;i<100*1000;i++)
cnt+=p[i]!=0x96;
if(cnt>g_stack_mem)
g_stack_mem=cnt;
printf("FUNC:%s,stack_bottom=%p,g_stack_size=%d\n",func,p,g_stack_mem);
}