2011-06-28 60 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