gpt4 book ai didi

c++ - qt c++中反序列化 map 的大小增加

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:16 30 4
gpt4 key购买 nike

我已经使用 QDataStream 序列化了一个 map 并将该对象写入一个文件。

当我再次反序列化并将 map 加载到内存时,序列化文件大小为 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 库检查了内存消耗。反序列化后消耗内存300MB。

感谢您的帮助。

最佳答案

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

但是,即使你定义了模板来重载operator<<或者只是重载了 operator<<接受指向 myMap 的指针类型(开头的三重类树)你仍然只写一个 100 个对象。当然,文件可能很容易比一组 100 个空对象小得多。

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

关于c++ - qt c++中反序列化 map 的大小增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26296581/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com