Проверка размера 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) можно найти в qbytearray.h и выглядит так:
struct Data {
QBasicAtomicInt ref;
int alloc, size;
char *data;
char array[1];
};
Таким образом, quint64 будет использовать меньше памяти, если ваши данные поместятся в него.
sizeof (arr) показывает размер указателя объекта.
do arr.squeeze (); тогда arr.capacity ();
Но не сохраняйте вызов squeeze для окончательного кода, он избавляется от любой предварительно выделенной неиспользуемой памяти объектом, поэтому он перераспределяет и записывает (дорого).