我正在尝试在OCaml中查看如何在内存映射文件中读取/写入数值数组。
我想我需要使用Bigarray但不确定如何将Bigarray数组写入内存映射文件,然后再读回来?
我似乎无法在任何地方找到一个例子。我查看了Jane St.核心的源代码,但无济于事。
答案 0 :(得分:4)
因为您似乎对使用核心感兴趣:
来自他们的文档(https://ocaml.janestreet.com/ocaml-core/109.58.00/doc/core/#Bigstring)
的map_file
val map_file : shared:bool -> Unix.file_descr -> int -> t
map_file shared fd n memory-mapping将与描述符fd关联的数据的n个字符映射到bigstring。 Iff共享是真的,对bigstring的所有更改都将反映在文件中。
你应该接受Jonathan创造的答案。
答案 1 :(得分:4)
我正在回答这个问题(我原本以为我错过了你的观点)。 OCaml库默认为此提供了一种机制,即map_file
function from the Bigarray.Genarray
module。它完全符合您的要求,相当于在Unix下mmap
'文件。我不确定Windows的细节。
这样做的好处是得到了良好的支持和良好的测试,并且如果您不需要将JaneSt的Core导入到您的项目中,则不需要它。