Arrays 是否有用于阵列的memmove/memcpy包装器?

Arrays 是否有用于阵列的memmove/memcpy包装器?,arrays,haskell,memmove,Arrays,Haskell,Memmove,我正在将程序从使用MVector Word32切换到STUArray Word32。在我的向量代码中,我使用unsafeMove移动向量切片;认为这可能是为了提高效率而包装memmove 案例dst⊕ 第三 src | ndo 设w0=n-src 设w'=w-w0 不安全移动(片dst w0 v)(片src w0 v) 如果w' 认为这可能是为了提高效率 首先,我决定帮你检查一下这是否是真的,事实确实如此 unsafeMove最终归结为为定义的basicUnsafeCopy操作,该操作委托给c

我正在将程序从使用
MVector Word32
切换到
STUArray Word32
。在我的向量代码中,我使用
unsafeMove
移动向量切片;认为这可能是为了提高效率而包装
memmove

案例dst⊕ 第三
src | ndo
设w0=n-src
设w'=w-w0
不安全移动(片dst w0 v)(片src w0 v)
如果w'
认为这可能是为了提高效率

首先,我决定帮你检查一下这是否是真的,事实确实如此

  • unsafeMove
    最终归结为为定义的
    basicUnsafeCopy
    操作,该操作委托给
    copyMutableArray
  • 因GHC版本而异。对于旧版本,它只是普通Haskell中的一个IO循环,但从7.8开始,它就委托给了一个primop
    copyMutableArray
  • 是围绕
    memmove
    memcopy
    的包装器,具体取决于数组是否重叠
我浏览了一遍,没有找到对
copyMutableArray
的引用。另一种可能是Data.Array为您提供了某种方式,让您可以将数组视为可变数组,从而自己调用
copyMutableArray
。但我也发现Data.Array中没有提到可变数组


我的初步结论是,Data.Array中没有
memmove
/
memcopy
包装器。

必须深入
Data.Array.Base
甚至
GHC.Arr
以实际获得执行合理高效的数组操作所需的访问权限,这并不罕见。除非您真的需要灵活的索引,否则请使用
原语中的数组
,或者使用
向量
。@dfeuer-aha,我不知何故错过了
数据.vector.unbox
@rampion,
向量
非常大。我还没有(还)找到可以让你在不需要的时候选择退出潜在昂贵的切片机的模块。混合模式融合机制是如此复杂,几乎没有人能理解引擎盖下发生了什么,或者他们需要做什么来确保他们的代码按预期编译。