我正在考虑将很多大型(1000多行)方法重构为漂亮的块,然后可以进行适当的单元测试。
这让我开始考虑调用堆栈,因为我的许多rafactored块中都有其他重构块,而我的大型方法很可能已被其他大型方法调用。
我想打开此讨论,看看重构是否会导致调用堆栈问题。我怀疑它在大多数情况下会如何,但是想知道重构的递归方法以及是否有可能在不创建无限循环的情况下导致堆栈溢出?
答案 0 :(得分:3)
不包括递归,我不会担心调用堆栈问题,直到它们出现(他们可能不会)。
关于递归:它必须仔细实施并仔细测试,无论它如何完成,所以这没有什么不同。
答案 1 :(得分:0)
我想这在技术上是可行的。但是,除非在我测试代码时实际发生这种情况,否则我不会担心。
答案 2 :(得分:0)
当我小时候,计算机有64K的RAM时,调用堆栈大小很重要。
如今,这几乎不值得讨论。内存很大,堆栈帧很小,一些额外的函数调用很难测量。
例如,Python有一个人为的小调用堆栈,因此它可以及时检测到无限递归。默认大小为1000帧,但可通过简单的API调用进行调整。
在Python中运行堆栈的唯一方法是不假思索地解决Project Euler问题。即便如此,您通常会在耗尽堆栈之前耗尽时间。 (100万亿个循环需要比人类寿命长得多。)
答案 3 :(得分:0)
我认为在重构时你不太可能得到没有递归的stackoverflow。我可以看到这种情况发生的唯一方法是,如果要在堆栈本身的方法之间分配和/或传递大量数据。