我们如何释放内存分配到列表?在以下代码中,即使清除列表并删除指向列表的指针,它也不会释放内存。我可以在系统监视器中看到程序占用的内存。 是否有一种有效的方法来删除分配给列表的内存?
struct Plot
{
int BUFFER[65535];
int BUFFER1[65535];
int BUFFER2[65535];
int BUFFER3[65535];
int BUFFER4[65535];
};
int main(int argc, char *argv[])
{
std::list<Plot> *LIST= new std::list<Plot>();
Plot PLOT;
int i=0;
while(i<1500)
{
(LIST)->push_back(PLOT);
i++;
usleep(100);
}
LIST->clear();
delete LIST;
while(1)
{
usleep(100);
}
}
答案 0 :(得分:1)
这个略微修改过的程序正在我的Windows机器上运行。
在您的平台上试一试,看看发生了什么。
(免责声明:这是一个糟糕的代码,只是为了坚持OP的代码。)
#include <list>
#include <windows.h>
struct Plot
{
int BUFFER[65535];
int BUFFER1[65535];
int BUFFER2[65535];
int BUFFER3[65535];
int BUFFER4[65535];
};
int main(int argc, char *argv[])
{
int i = 0;
while (1)
{
printf("Iteration %d\n", i++);
std::list<Plot> *LIST = new std::list<Plot>();
static Plot PLOT;
int i = 0;
while (i < 1500)
{
(LIST)->push_back(PLOT);
i++;
}
LIST->clear();
delete LIST;
Sleep(100);
}
}
这是系统监视器向我显示的内存使用情况与时间的关系(一个分区是1.6 Gb。):
这是系统监视器在运行以发布模式而不是调试模式编译的相同程序时向我显示的内容,它完全不同,因为内存分配器的内部实现在发布模式下完全不同:
但正如我们所看到的,内存在两个版本中都被正确释放,程序仍然在后台运行。