我想在Haskell中创建一些通用类型的固定长度循环缓冲区。缓冲区中的项目需要在物理内存(而不是链接列表)中一个接一个地定位。我想要这个特定的结构,因为它可以提高所有数据一起到达CPU上L2缓存的机会。我已经阅读了Haskell如何允许新的数据类型,但是它看起来像使用“数据”创建的类型更像是具有模式匹配和相关方法的荣耀的c结构。是否有可能在Haskell中完全创建如上所述的低级数据结构。haskell中的固定长度循环缓冲区
回答
你想要一个可变数组结构,并且你特别想要一个unboxed之一,以便底层数组不仅存储指向你的数据的指针,而且存储项目本身。
从标准阵列库Data.Array给你一个版本是,但尤其是高性能的阵列可从载体文库:http://hackage.haskell.org/package/vector
的矢量图库,像字节串,文本,和其他几个人在引擎盖下使用了相当数量的低级ghc特有的基元。要只使用这个库,你不应该自己担心这些事情。但是如果你决定图书馆没有给你你需要的东西,那么你也可以通过阅读它的源代码为自己学习相当数量的技巧和技巧。
Data.Vector另一个不错的特性是将'Data.Vector.Storable'数组传递给C库相对简单。 –
参见hackage软件包'vector-buffer'。 – vivian
是的,这当然是可以的。 Real World Haskell的章节creating a bloom filter应该是这些类型实现的一个很好的例子。
- 1. O(1)haskell中的循环缓冲区?
- 2. 如何设计一个固定的时间长度循环缓冲区?
- 3. 缓冲区溢出缓冲区长度
- 4. 将数据放入一个固定长度的缓冲区中
- 5. 写一个固定长度的缓冲区与偏移量
- 6. XmlReader从固定长度的缓冲区读取
- 7. 将未知长度的缓冲区复制到C中的固定大小缓冲区中
- 8. WDF EvtIoDeviceControl缓冲区长度
- 9. GetPrivateProfileString - 缓冲区长度
- 10. 高效循环缓冲区?
- 11. 循环缓冲区优化
- 12. 逆循环缓冲区
- 13. 缩小循环缓冲区
- 14. 循环缓冲区“requestBufferSize:couchbase
- 15. ActionScript3中的循环视频缓冲区
- 16. Java中的循环缓冲区?
- 17. VB.NET中的循环缓冲区
- 18. Simulink中的循环缓冲区
- 19. 协议缓冲区:无固定大小缓冲区的符号?
- 20. 如何定义固定大小的boost循环缓冲区作为类成员?
- 21. sendto的最大缓冲区长度?
- 22. 调整AudioUnit缓冲区的长度
- 23. 实现具有头部和尾部指针的固定长度缓冲区
- 24. 为什么我的环形缓冲区/循环缓冲区在java打破?
- 25. 使用SQL的循环缓冲区
- 26. 矢量的循环缓冲区
- 27. 循环缓冲区的线程安全
- 28. 如何增加MySQL缓冲区长度?
- 29. Nightmare.js截图缓冲区长度0
- 30. 文档长度不等于缓冲区
在Haskell中很难进行低级推理。恕我直言,最好使用C来完成最后一滴性能的任务。 – fuz
我想知道[Data.Sequence](http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html)如何与这样的数据结构进行比较。 –
jaspervdj,sclv,Dan Burton,谢谢你的回答。我不确定什么是最好的答案,但我会研究你们建议的一切。再次感谢。 –