写在C便携式功能(没有组件),该返回尝试它的堆栈帧便携式函数,返回它的堆栈帧的大小
int stackframe_size()
{
}
的解决它的大小below - 该函数在使用VS 2010进行编译时返回228个字节。有没有一种方法可以验证其正确性?
int stackframe_size(int run)
{
int i ;
if(!run)
{
return ((int)(&i) - stackframe_size(++run));
}
return (int)(&i);
}
援引为:
int main()
{
printf("\nSize of stackframe_size() is: %d bytes",stackframe_size(0)) ;
return 0;
}
:)我问这个,因为我想检查是否有一个聪明/清洁的方式来做到这一点,而无需添加读取参数地址的本地变量(比如使用递归技术)。 – Electrix 2015-02-06 03:49:15
听起来像是一个很好的技术给我。也许你应该分享这些代码,并解释它的工作原理和结果。 – user3386109 2015-02-06 03:55:20
你不能拥有这样的*便携*功能。一个假想的整体程序优化编译器可能*有时*没有任何堆栈生成代码;人们可以想象一些没有堆栈的C编译器(但是在一些垃圾收集堆中分配所有的调用帧,就像SML/NJ一样)。所以原则上,甚至不需要堆栈。但是我知道没有这种奇怪的C实现没有堆栈! – 2015-02-06 16:54:36