在C语言中,有没有一种方法可以在编译时知道并输出函数所需的堆栈大小?
这是我想知道的:
假设我们有一个函数:
void foo(int a) {
char c[5];
char * s;
//do something
return;
}
编译此函数时,我想知道它被调用时会消耗多少堆栈空间。这可能有助于检测隐藏大缓冲区的结构体在堆栈上声明的情况。
我正在寻找类似以下打印信息的东西:
文件foo.c:函数foo使用的堆栈大小为n
字节
是否有一种方法可以不查看生成的汇编代码来实现这一点?或者可以设置编译器的限制吗?
更新:我不是要避免给定进程的运行时堆栈溢出,我正在寻找一种在运行时之前查找函数堆栈使用情况的方法,就像编译过程的输出一样。
换句话说:是否有可能知道函数中所有本地对象的大小? 我猜编译器优化不会帮我忙,因为某些变量将会消失,但一个最高限度是可以接受的。