在xDebug 上,它们限制了一个函数可以嵌套多少次,嵌套函数这么多次有什么缺点吗?
问问题
320 次
1 回答
3
是的。
每次从另一个函数中调用一个函数时,都会向堆栈添加一层。
过去的函数调用还没有返回,所以他们为局部变量申请的内存不能被释放;它一直驻留,直到整个堆栈展开。
想象一下,您要从 1,000 次调用深度的函数内部抛出异常。为了生成堆栈跟踪,它必须向上遍历 1,000 个函数调用,将它们全部放入异常对象中。
递归没有什么可以做的,而使用编写良好的循环则无法做到,并且循环将更节省内存(因为它不必为每个函数调用产生堆栈帧开销)和时间效率(因为它没有实际执行您删除的函数调用的开销)。
递归级别达到 1,000 的程序极不可能按预期运行。更有可能的是,它陷入了无限递归,最终会耗尽系统的所有 RAM。最好早点杀掉。
于 2013-01-14T18:01:05.583 回答