有没有办法在 C 编译时知道并输出函数所需的堆栈大小?这是我想知道的:
让我们采取一些功能:
void foo(int a) {
char c[5];
char * s;
//do something
return;
}
编译此函数时,我想知道调用它时会消耗多少堆栈空间。这对于检测隐藏大缓冲区的结构的堆栈声明可能很有用。
我正在寻找可以打印这样的东西:
文件 foo.c : 函数 foo 堆栈使用是n
字节
有没有办法不查看生成的程序集来知道这一点?或者可以为编译器设置的限制?
更新:我不是试图避免给定进程的运行时堆栈溢出,我正在寻找一种在运行前查找的方法,如果编译器确定的函数堆栈使用情况可用作编译过程的输出。
让我们换一种说法:是否有可能知道函数本地所有对象的大小?我猜编译器优化不会是我的朋友,因为一些变量会消失,但一个更好的限制是好的。