haskell - Data.Attoparsec.ByteString 是否使用 "zero copy"ing?

标签 haskell bytestring attoparsec

takeWhile为例.在内部它使用 span .

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

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

最佳答案

是的,ByteString 上所有类似子串的操作都是 O(1),正如您在 documentation 中看到的那样,并制作一个具有不同偏移量/长度的浅拷贝。 如果您不需要它,请使用 copy 获取解析结果的完整副本,这样原始的巨大字符串就可以被垃圾回收。

此外,考虑 mmapAttoparsecLazy 化身,在连续解析大块的情况下它可能更优化.

关于haskell - Data.Attoparsec.ByteString 是否使用 "zero copy"ing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378922/

相关文章:

haskell - Haskell 中的类型条件控制

Haskell:如何解开数据中嵌套的可能

haskell - 具有惰性语义的高效理性重采样

performance - ByteString concatMap 性能

haskell - 在 attoparsec 中实现skipWhile1

haskell - 为什么 Haskell 不允许这种声明?

haskell - Data.ByteString 中的 findSubstrings 和 breakSubstring

haskell - 从字节串中获取任意位片

performance - 有效地将大文件读入 map

performance - 优化一个被多次调用的简单解析器