我创建了以下代码,以检查如何使用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;
};
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
可能是什么原因。
答案 0 :(得分:2)
通常,当应用程序需要内存时,它将从进程内内存舞台请求内存,如果内存不足,则舞台将从主机环境中获取更多。然后根据需要将其从竞技场分发出去。
应用程序完成一点内存后,会将其交还给竞技场以供以后分配。通常不会从竞技场移交给主持人。
因此,如果您要从主机的角度来衡量为应用程序分配了多少内存,它会上升但不会下降,至少直到应用程序退出为止,这时会返回所有 进程内存。
换句话说,是这样的:
+-------------+ +-------+
| | <- allocate - | | +------+
| application | | arena | <- obtain - | host |
| | --- free ---> | | +------+
+-------------+ +-------+ ^
\_____________________________________/ |
| |
+------ all handed back on exit -----+