1

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

我不需要该文件是人类可读的,因此二进制文件会更好地提高性能。谁能指点我一个现成的解决方案或给我有关如何实现此类读/写方法的想法?

我使用 bool 和 ints 类型的 3D multi_arrays,所以我需要使用模板。

4

1 回答 1

2

不需要使用一些特殊的序列化库,因为你的数据已经在内存中序列化了,你可以通过如下方式获取(假设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和 call的调用memcpy(data, buf, bytes);

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

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

于 2012-11-19T06:46:46.093 回答