0

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

4

2 回答 2

1

sizeof(arr) 显示对象的指针大小。做 arr.squeeze(); 然后 arr.capacity();

但是不要保留最终代码的挤压调用,它所做的是摆脱对象预先分配的任何未使用的内存,因此它会重新分配和 memcopies(昂贵)。

于 2013-07-16T13:13:39.227 回答
1

QByteArray(在 Qt 4.8 中)的实际数据可以在 qbytearray.h 中找到,如下所示:

struct Data {
    QBasicAtomicInt ref;
    int alloc, size;
    char *data;
    char array[1];
};

因此,如果您的数据适合其中,quint64 将使用更少的存储空间。

于 2013-07-16T14:40:18.380 回答