сохранение структуры данных c ++ на диск

У меня очень сложная структура данных с указателями на различные части памяти. Сборка занимает некоторое время, и я хотел бы сохранить «память», используемую этой структурой, на диск. Затем, когда программа запускается снова, она просто отображает файл в памяти, и я могу использовать его. Есть какой-либо способ сделать это ?

1

Решение

boost :: serialization может сделать это. Примечание: сначала напишите версию архива, а затем выполните register_types

3

Другие решения

Это может быть сделано, да, но вы должны знать, как структура на самом деле хранится в памяти и как она изменяется на различных платформах (выравнивание, упаковка, упорядочение байтов, размеры примитивных типов и т. Д.). Кроме того, было бы целесообразно изменить ваши «указатели на различные части» на «смещения на различные части», так как фактические области памяти будут меняться в зависимости от использования процесса.

Например, запись такого объекта на диск должна быть достаточно переносимой:

#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;
0

Вы могли бы начать с Boost.Interprocess и использовать отображенные в памяти файлы. Ваша структура данных будет выглядеть немного иначе (указатели — это умные указатели, ссылки запрещены, никаких виртуальных функций). Но это должно быть управляемым. По крайней мере все типы, которые вы используете, должны быть доступны в разделяемой памяти. Некоторые из них (Boost.Container), а некоторые нет (Boost.Any, Boost.Variant).

0
По вопросам рекламы [email protected]