栈溢出解决方法 卡死,解决栈溢出的方法

  栈溢出解决方法 卡死,解决栈溢出的方法

  在抓取网页时,我遇到了这个问题:

  Fatal Python error: Cannot recover from stack overflow

  我的问题是:使用函数时,递归调用太多(会出现800左右),导致堆栈溢出。

  在Python中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,相当于一次push压栈操作,每当函数返回,相当于一次pop出栈操作。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

  Windows程序的内存机制大概是这样的。全局变量(局部静态变量也属于这个范围)存放在堆内存,该段内存较大,一般不会溢出;函数地址、函数参数和局部变量等信息存储在堆栈存储器栈内存较小容易发生溢出现象,但是效率高。中。

  栈溢出的可能原因:1. 函数递归调用层次过深,每次调用函数时,函数的参数、局部变量等信息都被推送到堆栈一次,没有及时释放。2. 局部变量体积太大

  下图可以帮助我们理解,当堆栈空间快被占用时,就会发生溢出。

  解决方案:1.把递归调用函数改用while或者for循环来实现2.通过尾递归优化3.改用堆内存,在函数中定义了大型局部变量(如大型数组)。在这种情况下,可以将局部变量改为静态变量(本质上也是全局变量)。4.增大栈的大小值

  参考文章:https://blog.csdn.net/zcyzsy/article/details/77151709

  https://stack overflow . com/questions/40963288/fatal-python-error-cannot-recover-from-stack-overflow-during-flood-fill

  https://blog.csdn.net/qq_34178562/article/details/78198755

  https://blog.csdn.net/xc889078/article/details/8796880

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: