反序列化的地图在qt c ++中的大小增加

时间:2014-10-10 09:50:37

标签: c++ qt serialization qmap qdatastream

我使用QDataStream序列化了一个地图,并将该对象写入了一个文件。

当我再次反序列化并将映射加载到内存中时,序列化文件大小为1.5mb,内存消耗为300mb。我使用相同的QDataStream进行反序列化。

您能否告诉我为什么写入磁盘文件的1.5mb序列化对象的反序列化在内存中占用300mb的原因。

序列化:

QMap< QString, QSet< QString > >  myMap[100];
QSet<QString> mySet; // Assume it has some data in it.
QSet<QString> mySet1; // Assume it has some data in it.
MyMap.insert("a", mySet);
MyMap.insert("b", mySet1);
QFile f( strOutFile );
f.open(QIODevice::WriteOnly);
QDataStream streamOut( &f );
streamOut << myMap;

反序列化:

QFile f(StrInFile);
QMap< QString, QSet< QString > >  InMap[100];
QDataStream streamIn( f, QIODevice::ReadOnly );
streamIn >> InMap[index];

我使用MEMORYSTATUSEX windows库检查了内存消耗。 反序列化后,消耗的内存为300 MB。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

代码有问题。什么是MyMap?我没有看到它宣布。此外,您只是序列化指向myMap的指针(这是堆栈数组标识符的含义:指针),我无法掌握如何以这种方式获取1,5MB文件。

但是,即使您已定义模板以重载operator<<或仅重载operator<<以接受指向myMap类型的指针(开头的三重类树),您仍然只写一个100的对象。当然,文件可能比一组100个空对象轻得多。

如果我看到你的更多解释,我会更新我的答案。