空间泄漏通常是由执行一个消耗比必要空间更多的程序来定义的。这种定义是否与需要延迟评估以实现摊销时间效率的算法兼容?
我想知道这些是否倾向于在 thunk 结构中表现出不同的模式。例如,一个微不足道的空间泄漏可能如下所示:
1 + (2 + 3 + ...)
像树搜索这样的惰性算法会产生相似大小的 thunk 结构吗?
我怀疑适当的惰性评估模式看起来会有所不同,从而更容易发现实际泄漏。例如,结构可能如下所示:
[...] : a : b : c
其中[...]
part 是没有引用并且可能已经被垃圾收集的前缀。在这种情况下,惰性算法可以很好地在O(1)
空间上运行,并且不会出现空间泄漏,从而使区别非常明显。
我想知道这是否很常见,或者在惰性语言中需要在空间和时间效率之间进行更广泛的权衡。
编辑:一个可能的反例 - 持久结构。它们容易与空间泄漏区分开来吗?