1GB Vector,会将Vector.Unboxed给麻烦,Vector.Storable会给你带来麻烦吗?

时间:2015-05-04 19:10:14

标签: haskell

我们需要在内存中存储大量1GB的连续字节很长一段时间(几周到几个月),并且正在尝试选择一个Vector / Array库。我有两个问题,我无法找到答案。

  1. Vector.Unboxed似乎将底层字节存储在堆上,可以由GC随意移动....定期移动1GB数据将是我想要避免的。

  2. Vector.Storable通过将基础字节存储在c堆中来解决此问题。但我读过的所有内容似乎都表明这只是用于与其他语言(主要是c)进行通信。是否有一些原因我应该避免使用Vector.Storable进行内部Haskell使用。

  3. 如果有意义,我可以选择第三种方式!

1 个答案:

答案 0 :(得分:1)

我的第一个想法是the mmap package,它允许您使用虚拟内存系统管理分页,将文件“内存映射”到内存中。我不知道这是否适合您的用例(特别是,我不知道您是加载还是计算这1GB的数据),但是值得一看。

特别是,我认为这会阻止GC移动数据(因为它不在Haskell堆上,它由OS虚拟内存子系统管理)。另一方面,该接口仅处理原始字节;你不可能拥有一组Customer个对象或其他东西。