检查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将不起作用...
答案 0 :(得分:1)
sizeof(arr)显示对象的指针大小。 do arr.squeeze();然后是arr.capacity();
但是不要保持对最终代码的挤压调用,它所做的是通过对象去除任何预先分配的未使用的内存,因此它重新分配和memcopies(昂贵)。
答案 1 :(得分:1)
QByteArray的实际数据(在Qt 4.8中)可以在qbytearray.h中找到,如下所示:
struct Data {
QBasicAtomicInt ref;
int alloc, size;
char *data;
char array[1];
};
因此,如果您的数据适合,quint64将使用更少的存储空间。