在使用带有2GB RAM的Visual C ++的Windows XP上,创建堆栈溢出的同时必须在堆栈上有多少个函数? (即在递归函数中)
有没有一种简单的方法可以为其他类似情况计算出来?
答案 0 :(得分:3)
没有办法只从编译器中知道。堆栈溢出是因为堆栈溢出而发生的。堆栈的大小会根据函数的参数,函数使用的局部变量以及编译器优化而增长。甚至有一些C99函数我相信它会直接从堆栈中分配空间。
堆栈大小的限制由编译器开关确定,而不是您计算机中的RAM大小。因此溢出需要多少次调用与编译器设置有关,而不是内存。
这不是你可以确定先验的东西。至少,不是琐碎的。
答案 1 :(得分:0)
您可以尝试无限递归。这是堆栈溢出的常见原因之一。
int f()
{
g();
}
int g() {
f();
}