将数据结构c ++保存到磁盘

时间:2013-08-14 13:58:44

标签: c++ c data-structures save state-saving

我有一个非常复杂的数据结构,指向内存的各个部分。构建需要一段时间,我想将该结构使用的“内存”保存到磁盘。然后,当程序再次启动时,它将只是内存映射文件,我可以使用它。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:3)

boost :: serialization可以做到。注意:首先编写存档版本,然后执行register_types

答案 1 :(得分:0)

可以这样做,是的,但你需要知道结构实际存储在内存中的方式,以及它在各种平台上的变化(对齐,打包,字节排序,基本类型大小等)。此外,将“指向各个部分的指针”更改为“各部分的偏移”是谨慎的,因为实际的内存位置将在进程使用之间发生变化。

例如,将这样的对象写入磁盘应该是相当可移植的:

#pragma pack(1)
typedef struct {
   unsigned char data8[8];
   unsigned char data4[4];
   unsigned char offset[2];
   unsigned char data2[2];
} MyStruct;
#pragma pack() // to return to default

但是像这样的人会有很多问题:

typedef struct _MyStruct {
   unsigned long long data8;
   unsigned int data4;
   struct _MyStruct *nextOne;
   unsigned short data2;
} MyStruct;

答案 2 :(得分:0)

您可以从Boost.Interprocess开始并使用内存maped文件。您的数据结构将看起来不同(指针是智能指针,引用被禁止,没有虚函数)。但它应该是可管理的。至少您使用的所有类型都需要在共享内存中构建。有些是(Boost.Container),有些则不是(Boost.Any,Boost.Variant)。