C ++对象删除不免费存储器[重复]

问题描述 投票:-1回答:1

这个问题已经在这里有一个答案:

我具有以下我创建检查存储器可以如何分配和释放使用用qt和c ++代码

平台:Linux,ubunta 16.04

testmemeory.h

#include <QObject>

class testMemeory : public QObject
{
    Q_OBJECT
public:
    explicit testMemeory(QObject *parent = nullptr);
    void freeMEm();
    char* str;

};

testmemeory.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

可能是什么原因。

c++ qt memory-management
1个回答
2
投票

通常情况下,当应用程序需要的内存,它从一个进程的内存请求的舞台,并,如果没有足够的,竞技场将获得由主机环境等等。然后,它从舞台上需要通过个人的分配发放。

当应用程序,而位的内存说完,就动手吧回到舞台以后分配。它通常没有得到从竞技场到主机退还。

所以,如果你测量多少内存分配给但从主机的点的应用程序,它会倾向于而是要涨不跌,至少直到应用程序退出,此时所有进程的内存将给予背部。

换句话说,这样的事情:

+-------------+               +-------+
|             | <- allocate - |       |             +------+
| application |               | arena | <- obtain - | host |
|             | --- free ---> |       |             +------+
+-------------+               +-------+                 ^
\_____________________________________/                 |
                   |                                    |
                   +------ all handed back on exit -----+
© www.soinside.com 2019 - 2024. All rights reserved.