如何将提升::multi_array保存到文件

How to save a boost::multi_array to a file

本文关键字:array 存到文件 multi      更新时间:2023-10-16

我正在寻找一种简单的方法来保存和加载 3D 提升::multi_array的文件。据我所知,Boost 库中没有任何我觉得奇怪的方法。

我不需要文件是人类可读的,所以二进制文件会更好地提高性能。任何人都可以指出我一个现成的解决方案或给我有关如何实现这种读/写方法的想法吗?

我使用布尔和整数类型的 3D multi_arrays,所以我需要使用模板。

没有必要使用一些特殊的序列化库,因为您的数据已经在内存中序列化,您可以按如下方式获取它(假设A是包含int数据的数组:

int *data = A.data();
size_t size = A.num_elements();

您可以将其一一写入文件。更好的方法可能是使用 mmap ,如下所示:

int fd = open("myfile", O_RDWR);
size_t bytes = size * sizeof(int);
ftruncate(fd, bytes);
void *buf = mmap(NULL, bytes, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
memcpy(buf, data, bytes);
close(fd);
munmap(buf, bytes);
将数据

从文件重新加载到A非常容易。只需省略ftruncate调用并调用memcpy(data, buf, bytes);.

更好的方法是,如果您的数据很大,您只需将数据存储在文件中,使用 mmap 将其映射到内存地址,然后将地址传递给 multi_array_ref .在这种情况下,您无需专门将其写入文件。它是由操作系统芳香地完成的。

上面的代码被认为是Linux的,但我相信其他平台应该具有类似的功能。为清楚起见,省略了错误检查。