Почему размер вектора в оперативной памяти значительно больше, чем после сохранения на диск? QT

Я получаю по сокету данные несколько десятков раз в секунду, а именно структуру 140байт в виде QByteArray и помещаю это в вектор. Далее пишу содержимое в файл в другом классе(тоже в байтах). Проблема в том, что в оперативной памяти вектор занимает слишком много места(увеличивается на 50мб в минуту). Примерно в 10 раз больше, чем файл после записи на диск. Если же в к вектору применить vector.clear(); vector.squeeze(); то память освобождается. Но нужно решение по уменьшению объема в памяти, а не очищение.

socket.h


extern QVector<QByteArray> vector;

socket.cpp

QVector<QByteArray> vector;
//myStruct моя структура на 50+ элементов 
QByteArray array = socket->read(sizeof(myStruct));
vector.push_back(array);

file.cpp


file.open(QIODevice::WriteOnly);

for (int i = 0; i<=vector.size()-1;i++)
  {
   myStruct* message = reinterpret_cast< myStruct*>(vector[i].data());
        writeMessage  = * message;
        out << writeMessage;
    }
    file.close();

    //writtenVector.clear();
    //writtenVector.squeeze();

Ответы (2 шт):

Автор решения: Bloody.cpp

Скорее всего дело в том, что вектор выделяет память с запасом (Резервирует). Например в STL-овском варианте вектора, он выделяет памяти в 2 раза больше. Не знаю, как в QVector, но скорее всего он выделяет тоже в 2 раза больше, чем нужно. Это резервирование нужно чтобы ускорить работу вектора, ведь выделение памяти довольно затратная операция. При этом не ясно - сколько нужно будет скопировать информации в новый кусок памяти. И если предыдущий кусок памяти весил 1 мегабайт, то вектору придётся довольно долго копировать всё это в новый кусок. Потому память выделяется с запасом.

Ещё: В следующий раз выкладывайте код полностью. Никто не хочет гадать как написан класс myStruct, что такое writeMessage, почему в socket.cpp не подключается файл socket.h и почему там же нет определения "vector" (Лучше назвать его иначе. Особенно если вы используете using namespace std, и у вас подключен vector) И вообще почему код просто так находиться в файле socket.cpp. Короче - вопросов очень много, и дать однозначный ответ из-за этого сложно. Выкладывайте код полностью

→ Ссылка
Автор решения: AndreyStashev

Проблема заключалась в том, что QByteArray array выделяет не sizeof(myStruct) в размере структуры(140Б), а по несколько Кб, в итоге в вектор помещался в разы больший объем. Применение squeeze() к qbytearray уменьшает размер до 140Б, после чего вектор выделяет память всего лишь вдвое больше этого размера, что приемлемо.

socket.cpp

QVector<QByteArray> vector;
//myStruct моя структура на 50+ элементов 
QByteArray array = socket->read(sizeof(myStruct));
array.squeeze();
vector.push_back(array);
→ Ссылка