知识点讲解四:栈溢出(stack overflow)问题解决方案
发布日期:2021-07-01 04:21:28
浏览次数:16
分类:技术文章
本文共 560 字,大约阅读时间需要 1 分钟。
在爬取某个网页的时候遇到了这个问题:
Fatal Python error: Cannot recover from stack overflow
我问题所在:使用函数时递归调用次数过多(800左右会出现),导致栈溢出。
在Python中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,相当于一次push压栈操作,每当函数返回,相当于一次pop出栈操作。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
Windows程序的内存机制大概是这样的,全局变量(局部的静态变量本质也属于此范围)存储于堆内存,该段内存较大,一般不会溢出;函数地址、函数参数、局部变量等信息存储于栈内存,栈内存较小容易发生溢出现象,但是效率高。
栈溢出的可能原因:
1. 函数递归调用层次过深 ,每调用一次,函数的参数、局部变量等信息就压一次栈,并且没有及时出栈。 2. 局部变量体积太大可以通过下面这张图来辅助我们理解,当栈的空间接近被占完时,会发生溢出现象
解决方案:
1.把递归调用函数改用while或者for循环来实现 。 2.通过尾递归优化。 3.改用堆内存,函数里定义很大的局部变量(例如大数组),这种情况可以将局部变量改为静态变量(实质上也是全局变量)。 4.增大栈的大小值。参考文章:
转载地址:https://mtyjkh.blog.csdn.net/article/details/81903404 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年03月30日 19时59分25秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python爬虫爬取_腾讯位置大数据_人口迁徙图16年至今数据
2019-04-26
python爬虫爬取_高德地图_主要城市迁徙意愿排行榜_19年至今数据
2019-04-26
联通手机信令大数据的处理分析与可视化
2019-04-26
CNC机床刀具寿命预测
2019-04-26
Python遗传算法求解TSP旅行商问题——全国主要城市交通最短路径
2019-04-26
2021美赛建模ICM_Problem _D题音乐思路与代码
2019-04-26
LeetCode题解(0620):查找高评分的电影(SQL)
2019-04-26
LeetCode题解(0627):交换表中某字段的两种值(SQL)
2019-04-26
LeetCode题解(0700):二叉搜索树中的搜索(Python)
2019-04-26
LeetCode题解(0746):使用最小花费爬楼梯(Python)
2019-04-26
LeetCode题解(0747):寻找数组中至少是其他数字两倍的最大数(Python)
2019-04-26
LeetCode题解(0748):寻找符合要求的最短单词(Python)
2019-04-26
LeetCode题解(0762):二进制表示中质数个计算置位(Python)
2019-04-26
LeetCode题解(0766):判断矩阵是否为托普利茨矩阵(Python)
2019-04-26
LeetCode题解(0771):宝石与石头(Python)
2019-04-26
LeetCode题解(0783):二叉搜索树节点最小距离(Python)
2019-04-26
LeetCode题解(0784):字符串的字母大小写全排列(Python)
2019-04-26
LeetCode题解(0788):判断垂直旋转后仍有效的数字数量(Python)
2019-04-26
LeetCode题解(0788):进制转换的奇技淫巧
2019-04-26
LeetCode题解(0796):旋转字符串(Python)
2019-04-26