Большой расход памяти

206
09 июля 2018, 23:40

Есть сетевое приложение основанное на qt + boost asio под ос linux 64 bit. При запуске размер занимаемой оперативной памяти составляет порядка 20Mb, но в процессе работы на каждый создаваемый сокет программа вырастает в среднем немного менее чем на 1Mb, и итоге с 300-ми активными соединениями объем занимаемой памяти достигает ~250Mb.

sizeof самого дочернего класса соединения в иерархии не превышает 10кб. Объект сокета особо не содержит каких либо больших объемов данных. В приложении всего 7 потоков, 6 из них обработчики boost::io_service.

Такого же не должно быть? В чем может быть причина такого большого потребления памяти?

Answer 1

sizeof не показатель реального размера памяти, который необходим для работы объекта. sizeof покажет лишь общее кол-во байт, выделенных на стеке при размещении объекта на том же стеке. Если в процессе работы производится динамическое выделение памяти через new, то этот размер не отразится в sizeof, но вполне будет заметен при просмотре через менеджер памяти ОС.

Пример:

struct S
{
    S() : p(new int[10000]) {}
    int* p;
};

sizeof(S) даст размер указателя (8 или 4 байта) в зависимости от разрядности ОС. Но эффективный размер объекта типа S будет существенно больше, т.к. в конструкторе выделяется ещё массив в куче.

Answer 2

Использование профилировщика показало что большую часть памяти в куче выделяет CRYPTO_malloc и CRYPTO_realloc. Теперь есть над чем подумать...

READ ALSO
Изменение правила деления на 0

Изменение правила деления на 0

Что нужно изменить, или возможно хукнуть (перехватить) для изменения правила деления? В моих задачах при делении числа на 0 должен получаться...

180
Ошибка C2679 бинарный “<<”: не найден

Ошибка C2679 бинарный “<<”: не найден

Изучаю C++ по книге, и при написании такого кода

207
Что выполняют данные участки кода?

Что выполняют данные участки кода?

Собственно сами участки кода:

194
Как передать кнопку в слот QT

Как передать кнопку в слот QT

У меня есть кнопка button_one и слот Paint_orb который по сигналу Clicked делает вот что :

151