2011-06-28 109 views
9

我想在Haskell中创建一些通用类型的固定长度循环缓冲区。缓冲区中的项目需要在物理内存(而不是链接列表)中一个接一个地定位。我想要这个特定的结构,因为它可以提高所有数据一起到达CPU上L2缓存的机会。我已经阅读了Haskell如何允许新的数据类型,但是它看起来像使用“数据”创建的类型更像是具有模式匹配和相关方法的荣耀的c结构。是否有可能在Haskell中完全创建如上所述的低级数据结构。haskell中的固定长度循环缓冲区

+1

在Haskell中很难进行低级推理。恕我直言,最好使用C来完成最后一滴性能的任务。 – fuz

+0

我想知道[Data.Sequence](http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html)如何与这样的数据结构进行比较。 –

+0

jaspervdj,sclv,Dan Burton,谢谢你的回答。我不确定什么是最好的答案,但我会研究你们建议的一切。再次感谢。 –

回答

10

你想要一个可变数组结构,并且你特别想要一个unboxed之一,以便底层数组不仅存储指向你的数据的指针,而且存储项目本身。

从标准阵列库Data.Array给你一个版本是,但尤其是高性能的阵列可从载体文库:http://hackage.haskell.org/package/vector

的矢量图库,像字节串,文本,和其他几个人在引擎盖下使用了相当数量的低级ghc特有的基元。要只使用这个库,你不应该自己担心这些事情。但是如果你决定图书馆没有给你你需要的东西,那么你也可以通过阅读它的源代码为自己学习相当数量的技巧和技巧。

+4

Data.Vector另一个不错的特性是将'Data.Vector.Storable'数组传递给C库相对简单。 –

+0

参见hackage软件包'vector-buffer'。 – vivian