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