【发布时间】:2013-07-14 16:22:34
【问题描述】:
检查 QByteArray 的大小总是返回 4 个字节,我假设是由于 Qt 中隐式共享数据:
int n = 50; //or n = 100, 200
QByteArray arr(n,'a');
cout << sizeof(arr) << endl;
::getchar();
总是打印 4
如何估计 QByteArray 的实际内存占用?这个问题的动机是有效地存储大量 5 字节标识符 - 它们可以分别存储为 quint64 (每个使用 8 个字节,因此浪费了 3 个字节),或者每个作为 QByteArray - 但我不知道如何在后一种情况下估计开销....
我想使用这些标识符作为 QMap 的键,所以它们应该各自在自己的结构中 - 一个长 QByteArray 不起作用...
【问题讨论】:
-
如果你想有效地存储这 5 个字节,那么普通的旧结构怎么样?
-
@Roku 以及如何将它们存储为 POD - 包含带有比较运算符的 char[5] 的结构?
-
也许使用结构体不是一个好主意,至少使用 QByteArray 更容易。顺便说一句,你有多少个 5 字节标识符?超过 200 个?
-
@Roku 是的,有数千个 - 每个文件 1000 到 4000 个,目标是一次处理尽可能多的文件(最多 800-900 个文件)。为什么,200 有什么特别之处?
-
哦,200 没什么特别的,它只是从你的代码中出来的。我认为标识符的数量并不多。如果您使用 quint64,您将浪费 900*4000*3=11 兆字节的内存。除非您的程序已经在使用千兆字节的内存(并且某些 32 位操作系统存在问题),否则我不会担心浪费的内存量。相反,我会选择最容易实现和维护的方法。
标签: c++ qt qbytearray