2013-06-25 20 views
11

考虑下面的代码:http://hpaste.org/90394段错误读取懒字节字符串过去2^18字节

我是内存映射大的460MB文件到一个懒惰的字节串。 ByteString的长度报告为471053056

当更改为较低节点ID,即:10000时,它可以很好地工作。然而;只要我尝试序列化ByteString的正好2^18字节(262144)的任何东西,我就会得到Segmentation fault/access violation in generated code并终止。

我正在运行Windows并使用GHC 7.4.2。

请告知这是我的错,还是与懒惰有关的问题,或者与Haskell有关的问题。

+1

您的'getNXNode'与'NXNode'数据定义不匹配。如果这是故意的,那么值得评论。但我不明白这是如何导致段错误的。 –

+0

@DanielFischer'NXNode 0 <$> ...':) – kvanberendonck

+0

是的,但是你跳过20个字节,每个节点只读12个。 –

回答

1

请注意,我更新了mmap,以便在代码中的战略点处正确包含NOINLINE杂注。 mmap-0.5.9可用于抓取。让我知道如果问题依然存在。 编辑:是的,我是mmap的作者。

+0

虽然看起来你是mmap作者,但从你的回答来看,这并不完全清楚。我会考虑增加更多信息。 – Syon