【发布时间】:2010-09-12 15:59:51
【问题描述】:
有没有办法在 C 语言编译时知道并输出函数所需的堆栈大小? 以下是我想知道的:
让我们使用一些函数:
void foo(int a) {
char c[5];
char * s;
//do something
return;
}
在编译这个函数时,我想知道调用它时会消耗多少堆栈空间。这对于检测隐藏大缓冲区的结构的堆栈声明可能很有用。
我正在寻找可以打印这样的东西:
文件 foo.c : 函数 foo 堆栈使用为 n 字节
有没有办法不查看生成的程序集来知道这一点?还是编译器可以设置的限制?
更新:我不是试图避免给定进程的运行时堆栈溢出,我正在寻找一种方法来在运行时之前找到,如果编译器确定的函数堆栈使用情况可用作编译的输出过程。
让我们换一种说法:是否有可能知道函数本地所有对象的大小?我猜编译器优化不会是我的朋友,因为一些变量会消失,但一个高级限制是好的。
【问题讨论】:
-
如果你想知道,我输入了秘密 '}' 字符
-
这个问题对我来说似乎不清楚。我想如果你写更多关于为什么你想知道这个以及为什么检查反汇编或可执行文件(这是检查编译器输出的最简单方法)是不可接受的,也许有人可以找到一些简单的解决方案?
标签: c compiler-construction callstack