Data.Attoparsec.ByteString是否使用"零拷贝" ing?

时间:2014-03-13 12:38:21

标签: haskell bytestring attoparsec

takeWhile为例。在内部,它使用span

这是否意味着它只引用输入字节串?可能不是,如果有的话,有没有办法实现这个目标?

激励用例是一个大型(> 2gb)文件,我希望将其映射到内存并提取指向映射内存的字节串。

1 个答案:

答案 0 :(得分:3)

是的,ByteString上所有类似字符串的操作都是 O(1),正如您在documentation中看到的那样,并使用不同的方法制作浅层副本偏移/长度。 如果您不需要,请使用copy获取已解析结果的完整副本,以便原始的大字符串可以被垃圾收集。

此外,考虑Lazymmap的{​​{1}}版本,如果连续解析大块,它可能更为理想。