4个回答
展开全部
溢出的意思就是越界,操作系统会给每个进程分配一个最大上限的堆栈空间,如果超过了这个内存空间大小程序就会coredump,就像你使用int *pi = new int[100000000];会崩溃一样,因为这里堆溢出了。
操作系统分配给一个进程的栈空间是2M,堆空间在32位机器上是4G。如果你的进程的栈空间使用超过了2M就会栈溢出,堆使用超过4G就会堆溢出。
那么递归为什么会导致栈溢出呢?相信楼主知道栈的出入规则,先入后出,递归的话那么先入的一致不能出栈,会一致存在栈空间中,这样就容易导致栈满而溢出。
哈哈,还有不懂不?
操作系统分配给一个进程的栈空间是2M,堆空间在32位机器上是4G。如果你的进程的栈空间使用超过了2M就会栈溢出,堆使用超过4G就会堆溢出。
那么递归为什么会导致栈溢出呢?相信楼主知道栈的出入规则,先入后出,递归的话那么先入的一致不能出栈,会一致存在栈空间中,这样就容易导致栈满而溢出。
哈哈,还有不懂不?
展开全部
递归的层度太多了却还没有到达结束条件,以至于超出了系统所能承受的程度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每当你调用一个函数,在这个函数执行前都会将之前的代码地址(也就是调用点)入栈,等被调用的函数执行完将地址出栈,程序根据这个数据返回调用点。
若递归调用次数太多,就会只入栈不出栈,于是堆栈就被压爆了,此为栈溢出。
其中概念性的东西可以百度
若递归调用次数太多,就会只入栈不出栈,于是堆栈就被压爆了,此为栈溢出。
其中概念性的东西可以百度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
递归函数调用的太深,需要太多的内存,递归里用到的局部变量存储在堆栈中,堆栈的访问效率高,速度快,但空间有限,递归太多变量需要一直入栈而不出栈,导致需要的内存空间大于堆栈的空间,栈空间是2M,堆空间内存空间。将逻辑关系理清楚,减少递归的次数应该能解决问题,像你这样递归深度比较大,不太适合用递归来解决问题,楼主可以考虑下其他的解决方案,即便是现在没问题,等到以后还是可能会出现问题的,防止隐患,楼主可以考虑放弃递归。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询