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

jam*_*idh 9 haskell

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

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

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

如果有意义,我愿意接受第三种选择!

Mat*_*hid 1

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

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