我正在尝试使用OCaml实验,看看如何将数字数组读/写到内存映射文件中。
我认为我需要使用Bigarray,但不确定如何将Bigarray数组写入内存映射文件,然后再读回来?
我似乎找不到任何例子。我已经检查了Jane St. core的源代码,但没有结果。
我正在尝试使用OCaml实验,看看如何将数字数组读/写到内存映射文件中。
我认为我需要使用Bigarray,但不确定如何将Bigarray数组写入内存映射文件,然后再读回来?
我似乎找不到任何例子。我已经检查了Jane St. core的源代码,但没有结果。
因为你似乎有兴趣使用core:
这里是他们文档中的map_file
函数(https://ocaml.janestreet.com/ocaml-core/109.58.00/doc/core/#Bigstring)
val map_file : shared:bool -> Unix.file_descr -> int -> t
map_file共享fd,n个内存映射将与描述符fd关联的数据的n个字符映射到一个bigstring。如果shared为true,则对bigstring所做的所有更改都将反映在文件中。
但是,您应该接受Jonathan创建的答案。
Bigarray.Genarray
模块的map_file
函数。它恰好可以实现你想要的效果,并相当于在Unix下使用mmap
映射文件。我不确定Windows的具体情况。
map_file
是一个函数,它可以将一个文件映射到内存中的 bigarray 数组中。映射后,对数组的任何访问都会被重定向到文件中相应的位置。这个函数需要三个参数:文件描述符、文件的偏移量(从文件开头算起)、以及要创建的 bigarray 的类型和尺寸。 - Jonathan Protzenko