首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否将types转换为其他类型?

是否将types转换为其他类型?
EN

Stack Overflow用户
提问于 2009-09-21 07:12:10
回答 3查看 190关注 0票数 2

我意识到这可能是一个相当离经叛道的问题,但我想知道是否可以通过System.IO.Posix.MMap映射数据文件,然后将生成的ByteString cast到其他类型的严格数组中?例如:如果我知道这个文件包含双精度的数据,我能不能以某种方式将这个mmapped数据放到一个UArr双精度中,这样我就可以对它执行sumU等操作,并让虚拟内存系统为我处理IO?这基本上就是我在C++代码中处理多GB数据集的方式。另类更地道的方式来做这也很感谢,谢谢!

我还可以对数据进行多核处理的最高加分:-)不是我所要求的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-21 15:53:49

我不认为这样做是安全的。UArr是Haskell堆分配的未固定内存,GC会移动它。ByteStrings (和mmapped )是固定内存的ForeignPtrs。它们是运行时系统中的不同对象。

如果要将底层类型从ForeignPtr更改为Haskell值'a‘,则需要进行复制以确保安全。

票数 3
EN

Stack Overflow用户

发布于 2009-09-21 08:07:51

恐怕我不知道如何将ByteString转换为UArr T,但我想通过建议您看看Data Parallel Haskell来获得一些“额外的分数”;从您所描述的问题来看,它可能就是您所熟悉的。

票数 1
EN

Stack Overflow用户

发布于 2009-09-22 20:35:20

您可能需要在这里使用Foreign.Marshal,尤其是Foreign.Marshal.Array。它的设计就是为了做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1453192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档