5字节QByteArray的内存占用空间.5字节的quint64或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不起作用。。。

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

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

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

sizeof(arr)显示对象的指针大小。执行arr.sruzze();则arr.ccapacity();

但不要保留对最终代码的挤压调用,它所做的是清除对象预先分配的未使用内存,因此它会重新分配和内存拷贝(代价高昂)。

最新更新