如何计算GCC中被调用函数树所需的堆栈大小

时间:2017-06-17 16:41:30

标签: gcc stack

是否有可能在没有外部计算的情况下确定堆栈上的非递归函数,就在程序文本中?我需要这个在非常小的微控制器(如AVR)中为线程分配内存资源。我需要在函数调用之前知道这一点。不幸的是,指令 - 堆栈使用非常缺乏信息。或者我有些不明白的事情?

1 个答案:

答案 0 :(得分:0)

获取传递参数的地址会使它在堆栈中占据一席之地。因此运行:

#include <stdio.h>

void my_fun(int dummy);
int get_stack_space(int dummy);

int main(void)
{
    int dummy = 0;

    my_fun(dummy);

    return 0;
}

void my_fun(int dummy)
{
    // do stuff
    printf("%d\n", get_stack_space((int)&dummy));
    return;
}

int get_stack_space(int dummy)
{
    return dummy - (int)&dummy;
}

应该在调用my_fun()和调用get_stack_space()之间获得堆栈上的字节距离。希望它有所帮助。

编辑:在x86上你得到距离+一个机器字,用于在my_fun()的开头调用my_fun()+推送ebp的机器字时按下返回地址