0

我正在考虑将许多大型(1000 多行)方法重构为漂亮的块,然后可以酌情进行单元测试。

这让我开始思考调用堆栈,因为我的许多重构块中都有其他重构块,而且我的大型方法很可能已被其他大型方法调用。

我想打开它进行讨论,看看重构是否会导致调用堆栈问题。我怀疑在大多数情况下它会,但想知道重构的递归方法以及是否有可能在不创建无限循环的情况下导致堆栈溢出?

4

4 回答 4

3

排除递归,我不会担心调用堆栈问题,直到它们出现(他们可能不会)。

关于递归:无论它是如何完成的,都必须仔细实施和仔细测试,所以这没有什么不同。

于 2009-04-27T16:03:00.033 回答
0

我想这在技术上是可行的。但除非在我测试代码时真正发生,否则我不会担心。

于 2009-04-27T16:03:45.290 回答
0

当我还是个孩子的时候,计算机有 64K 的 RAM,调用堆栈的大小很重要。

如今,几乎不值得讨论。内存很大,堆栈帧很小,一些额外的函数调用很难测量。

例如,Python 有一个人为的小型调用堆栈,因此它可以迅速检测到无限递归。默认大小为 1000 帧,但可通过简单的 API 调用进行调整。

在 Python 中与堆栈发生冲突的唯一方法是不假思索地解决 Project Euler 问题。即便如此,您通常会在堆栈用完之前用完时间。(100 万亿次循环所花费的时间远远超过人类的寿命。)

于 2009-04-27T16:04:10.093 回答
0

我认为您在重构时不太可能在没有递归的情况下获得 stackoverflow。我可以看到会发生这种情况的唯一方法是,如果您在堆栈本身的方法之间分配和/或传递大量数据。

于 2009-04-27T16:04:39.203 回答