C++ 删除对象不释放内存

c++ deleting object do not free memory

本文关键字:释放 内存 对象 删除 C++      更新时间:2023-10-16

我创建了以下代码来检查如何使用qt和c ++分配和释放内存

平台: Linux, Ubunut 16.04

Testmemeory.h

#include <QObject>
class testMemeory : public QObject
{
    Q_OBJECT
public:
    explicit testMemeory(QObject *parent = nullptr);
    void freeMEm();
    char* str;
};

睾丸.cpp

testMemeory::testMemeory(QObject *parent) : QObject(parent)
{
        str = new char [30000];
}
void testMemeory::freeMEm(){
    delete [] str;
}

这是我用来存储对象的数组。

std::vector<testMemeory*> testList;

我正在使用分配内存

void MainWindow::allocateMemory()
{
    for(int i=0;i<50000;i++){
        testMemeory *t = new testMemeory();
        testList.push_back(t);
    }
    qDebug()<<"Memory allocated..";
}

并释放内存使用

void MainWindow::relaseMemory()
{
    for(int i=0;i<testList.size();i++)
        testList.at(i)->freeMEm();
    qDeleteAll(testList);
    testList.clear();
    qDebug()<<"Memory freed..";
}

当我执行分配内存时,用于应用程序的RAM从150MB增加到大约350MB,而好像调用relaseMemory((函数一样,RAM仍然是350 MB,并且不会减少到150 MB

可能是什么原因。

通常,当应用程序需要内存时,它会从进程内内存领域请求内存,如果没有足够的内存,该领域将从主机环境中获取更多信息。然后根据个人分配的需要从竞技场分发。

当应用程序完成一点内存时,它会将其交回竞技场以供以后分配。它通常不会从竞技场交还给主持人。

因此,如果您从主机的角度测量分配给应用程序的内存量,它往往会上升但不会下降,至少在应用程序退出之前此时所有进程内存都将返回。

换句话说,像这样:

+-------------+               +-------+
|             | <- allocate - |       |             +------+
| application |               | arena | <- obtain - | host |
|             | --- free ---> |       |             +------+
+-------------+               +-------+                 ^
_____________________________________/                 |
                   |                                    |
                   +------ all handed back on exit -----+