У меня очень сложная структура данных с указателями на различные части памяти. Это займет некоторое время, и я хотел бы сохранить «память», используемую этой структурой на диске. Затем, когда программа будет запущена снова, она просто сохранит карту, и я могу ее использовать. Есть какой-либо способ сделать это ?сохранение структуры данных C++ на диск
ответ
Это можно сделать, да, но вам нужно знать, как структура фактически хранится в памяти, и как это изменяется на разных платформах (выравнивание, упаковка, порядок байтов, размеры примитивного типа и т. Д.). , Кроме того, было бы разумно изменить ваши «указатели на разные части» на «смещения на разные части», поскольку фактические ячейки памяти будут меняться между процессами.
пример, пишущий объект, как это на диск должен быть достаточно портативный:
#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;
подталкивание :: сериализации может это сделать. Примечание: сначала напишите архивную версию, а затем register_types
Вы можете начать с Boost.Interprocess и использовать карты памяти. Ваша структура данных будет выглядеть litle differnt (указатели - это умные указатели, ссылки запрещены, нет виртуальных функций). Но это должно быть управляемо. По крайней мере, все типы, которые вы используете, должны быть созданы в общей памяти. Некоторые из них (Boost.Container), а некоторые нет (Boost.Any, Boost.Variant).
Да, просто пройдите через вашу структуру и скопируйте массив байтов. Если это указатель, просто получите доступ к данным, на которые указывает указатель, и скопируйте их. Приведите пример структуры, и я пойду глубже. – Magn3s1um
Можете ли вы показать свою структуру данных? – lurker
Опубликуйте упрощенную версию класса, скажем, с двумя указателями на другие вещи и с несколькими простыми членами данных, и мы покажем вам, как писать и читать. – Beta