Qt c++ 中反序列化映射的大小增加
Deserialized map's size increase in qt c++
我已经使用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窗口库检查了内存消耗。在反序列化之后,消耗的内存为300mb。
谢谢你的帮助。
代码有问题。什么是MyMap
?我没有看到它被宣布。此外,您只串行化了一个指向myMap
的指针(这就是堆栈数组标识符的意思:指针),我无法理解您是如何以这种方式获得1.5MB文件的。
然而,即使您已经定义了重载operator<<
的模板,或者只是重载operator<<
以接受指向myMap
类型的指针(开头的三重类树),您仍然只写一个100的对象。当然,文件可能比一组100个空对象小得多。
如果我看到你的更多解释,我会更新我的答案。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 数组索引的值没有增加
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 为什么我的代码在输出中增加了93天
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 为什么这个 x 值在这个循环映射中没有增加?C++
- 增加迭代器标准映射
- 在不增加引用计数的情况下迭代共享指针的映射
- C++映射数组键自动增加
- C++映射/设置迭代器在使用多映射时出现不可增加的错误
- Qt c++ 中反序列化映射的大小增加
- 增加内存映射文件的大小