我有problem 1-4 of the Matasano Cryptopals Challenge的以下实现,在文件中找到一行,用单个字节xor'd的文本字符串。它适用于大文件,但显示“堆栈空间溢出:当前大小8388608字节”。提供的文件。
<rule name="Domain redirect" >
<match url="*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^.+$" />
</conditions>
<action type="Redirect" url="http://www.mydummysite.com/{R:0}" />
</rule>
该程序通过遍历包含每个可能键的每个输入行xor'd的列表来工作。我怀疑这个大型列表以某种方式对溢出负责,但我认为这不会导致内存问题,因为列表会被懒惰地生成。我不认为我对何时评估thunks以及如何导致堆栈溢出有足够的理解。
所以我的问题是:为什么生成或遍历此列表会导致堆栈溢出?
答案 0 :(得分:1)
正如this thread中所讨论的那样,我们现在在序言中列出的maximumBy
在性能上并不是最佳的,对于各种各样的,好吧,我们只说“理由”。
如果您使用建议的maximumBy'
函数,这是严格的,您可能会修复泄漏:
foldl1' f l = foldl' f (head l) (tail l)
maximumBy' f = foldl1' max'
where max' x y = case f x y of
GT -> y
_ -> x