递归中的stack overflow(栈溢出)相关问题

很多同学在使用递归的时候,总是会出现这样的一个问题:

在你的代码中,你写了一段递归调用,不幸的是这段递归调用产生了这样的一个问题。

那么这是个什么问题呢?它又是为什么会产生的呢?

我们看到提示是:Stack overflow,即栈溢出。

我们知道在递归调用的时候,我们的参数、返回值等都会进行压栈、出栈操作,他们都在占用着计算机资源,准确点的说就是占用栈空间。大家有没有想过一个问题,这里的栈空间到底有多大?

我们可以通过代码测试一下:

#include <iostream>

using namespace std;

void test(){

   int i = 0;

   cout<<&i<<endl;

   isOK();

}

int main(){

    test();

   return 0;

}

我们可以在调试模式下获得第一次和最后一次的i的地址,通过计算就可以得到我们的栈空间大小。不同的操作系统下,这里的结果是不一样的,大家可以自行测试。

在一般情况下,不同平台默认栈大小如下(仅供参考):

SunOS/Solar:8172K bytes (SharedVersion)

Linux :10240 K bytes

扫描二维码关注公众号,回复: 1058327 查看本文章

Windows: 1024K bytes(Release Version)

猜你喜欢

转载自blog.csdn.net/lws123253/article/details/80038571