Управление памятью Qt.В чем дело? - PullRequest
2 голосов
/ 05 октября 2010

У меня есть вопрос об утечках памяти в Qt.

У меня есть QMainWindow с 2 кнопками QPushButtons.

Первый сигнал нажатия кнопки:

m_label = new QLabel(this);

QPixmap pix(this->size());
QPainter painter;
painter.begin(&pix);

QImage img("1.png");
painter.drawPixmap(this->rect(), QPixmap::fromImage(img));
m_label->setPixmap(pix);

painter.end();

Сигнал нажатия кнопки Secont:

delete m_label;

Когда я запускаю тестовое приложение, выделенная память составляет около 11900 Кб Когда я нажимаю на первую кнопку, то выделяемая память для приложения составляет около 12450 Кб При нажатии на вторую кнопку мне выделяется память около 12250 Кбайт

Почему я не получил тот же 11900 Кб? Это утечка?

Так что, если написать следующий код:

QImage img("1.png");
QImage img1("1.png");
QImage img2("1.png");
QImage img3("1.png");
QImage img4("1.png");
QImage img5("1.png");
QImage img6("1.png");
QImage img7("1.png");
QImage img8("1.png");
QImage img9("1.png");

Тогда выделенная память увеличивается, но не уменьшается. Зачем? Как убрать эту утечку памяти?

1 Ответ

3 голосов
/ 06 октября 2010
  1. После первого вызова QImage img ("1.png") Qt загружает плагины форматов изображений и оставляет их загруженными после использования (из-за проблем с производительностью).Таким образом, часть памяти, которая осталась от загруженных плагинов, и это не утечка.
  2. Где вы распределяете эти QImages (случай img ... img9)?Вы уверены, что они выходят за рамки?
  3. Помните, что ОС не всегда сохраняет память сразу после ее освобождения программным обеспечением.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...