5字节QByteArray的内存占用。 quint64或5字节的QByteArray是否更有效用于存储?

时间:2013-07-16 13:06:35

标签: c++ qt qbytearray

检查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将不起作用...

2 个答案:

答案 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将使用更少的存储空间。