C++ 删除对象不释放内存
c++ deleting object do not free memory
我创建了以下代码来检查如何使用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 -----+
相关文章:
- 如何在c++中释放内存
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 释放内存(主题模板)时出现问题
- 使用后自动释放内存
- C++ 如何释放内存
- 从函数内对象的向量中释放内存
- C++ 在不释放内存的情况下调用析构函数
- 多个线程之间的获取-释放内存顺序
- C++ - 析构函数只是释放内存还是实际删除对象
- 使用 RAII 替换最终块以释放内存
- 如何通过带有指向基类的指针的删除运算符释放内存
- 代码中的"sprintf"用法是否需要释放内存?
- C++何时使用 delete[] 并正确释放内存?
- 为什么此获取和释放内存围栏不能给出一致的值?
- 抛出新表达式的参数子表达式时释放内存
- 在这种情况下,如何释放内存?
- 在 c++ 中应按什么顺序释放内存?