Qt内存管理。什么';怎么了?

Qt内存管理。什么';怎么了?,qt,Qt,我有一个关于Qt内存泄漏的问题 我有一个带2个按钮的Qmain窗口 第一个按钮点击信号: 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->setPixm

我有一个关于Qt内存泄漏的问题

我有一个带2个按钮的Qmain窗口

第一个按钮点击信号:

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();
delete m_label;
Secont按钮点击信号:

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();
delete m_label;
当我启动测试应用程序时,分配的内存约为11900KB 当我点击第一个按钮时,应用程序分配的内存约为12450KB 当我点击第二个按钮时,我得到了大约12250KB的分配内存

为什么我没有得到同样的11900KB?这是个漏洞吗

因此,如果要编写以下代码:

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");
然后,分配的内存会增加,但不会减少。为什么?如何清除内存泄漏

  • 在第一次调用QImage img(“1.png”)之后,Qt加载图像格式插件,并在使用后保持加载状态(用于性能问题)。所以剩下的部分内存来自加载的插件,而不是泄漏
  • 您在哪里分配这些QIMAGE(img…img9案例)?你确定它们超出了范围吗
  • 请记住,操作系统并不总是在软件释放内存后立即保留内存

  • 你是如何测量内存消耗的?…在img…img9的情况下,你预计它什么时候会减少?(但一般的测量问题更为相关)此外,我认为Qt缓存了一些数据,同时还有一个事实,即通过创建对象触发的许多内存结构通常只会增长,而不会经常收缩(例如,子对象列表)。