这个问题已经在这里有一个答案:
我具有以下我创建检查存储器可以如何分配和释放使用用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
可能是什么原因。
通常情况下,当应用程序需要的内存,它从一个进程的内存请求的舞台,并,如果没有足够的,竞技场将获得由主机环境等等。然后,它从舞台上需要通过个人的分配发放。
当应用程序,而位的内存说完,就动手吧回到舞台以后分配。它通常没有得到从竞技场到主机退还。
所以,如果你测量多少内存分配给但从主机的点的应用程序,它会倾向于而是要涨不跌,至少直到应用程序退出,此时所有进程的内存将给予背部。
换句话说,这样的事情:
+-------------+ +-------+
| | <- allocate - | | +------+
| application | | arena | <- obtain - | host |
| | --- free ---> | | +------+
+-------------+ +-------+ ^
\_____________________________________/ |
| |
+------ all handed back on exit -----+