这是否意味着它只是引用输入字节串?可能不是,如果是这样,有没有办法实现这一目标?
激发用例是一个大的 (>2gb) 文件,我想将其映射到内存中并提取指向映射内存的字节串。
最佳答案
是的,ByteString
上所有类似子串的操作都是 O(1),正如您在 documentation 中看到的那样,并制作一个具有不同偏移量/长度的浅拷贝。
如果您不需要它,请使用 copy
获取解析结果的完整副本,这样原始的巨大字符串就可以被垃圾回收。
此外,考虑 mmap
和 Attoparsec
的 Lazy
化身,在连续解析大块的情况下它可能更优化.
关于haskell - Data.Attoparsec.ByteString 是否使用 "zero copy"ing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378922/