データはすでにメモリ内でシリアル化されており、次のように取得できるため、特別なシリアル化ライブラリを使用する必要はありません(データA
を含む配列があるとします。int
int *data = A.data();
size_t size = A.num_elements();
ファイルに1つずつ書き込むことができます。より良い方法は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
です。この場合、特にファイルに書き込む必要はありません。それはOSによって芳香的に行われます。
上記のコードはLinuxで考慮されていますが、他のプラットフォームでも同様の機能が必要だと思います。わかりやすくするために、エラーチェックは省略されています。