容器和内存泄漏
Containers & memory leak
void foo()
{
std::list<std::string> list;
for (int i = 0; i < 10000000; ++i)
{
std::string str ="text";
list.push_back(str);
}
list.clear();
}
为什么在 运行 func 内存变大了,但是在 exec 之后这个 func 内存没有完全释放...
例如:在 exec func 之前:6'000 kb,在 运行 func:200'000 kb,在 exec func 之后是:9'000 kb...有什么建议吗?
部分解决方法可能是使用内存池和自定义分配器。然后内存完全由您的应用程序处理。
对口就是自己去实现,小心处理(基本情况可以用Boost.Pool)。此外,如果您的应用程序在多个方面对内存要求很高,您应该共享池,可能会处理碎片问题。
void foo()
{
std::list<std::string> list;
for (int i = 0; i < 10000000; ++i)
{
std::string str ="text";
list.push_back(str);
}
list.clear();
}
为什么在 运行 func 内存变大了,但是在 exec 之后这个 func 内存没有完全释放... 例如:在 exec func 之前:6'000 kb,在 运行 func:200'000 kb,在 exec func 之后是:9'000 kb...有什么建议吗?
部分解决方法可能是使用内存池和自定义分配器。然后内存完全由您的应用程序处理。
对口就是自己去实现,小心处理(基本情况可以用Boost.Pool)。此外,如果您的应用程序在多个方面对内存要求很高,您应该共享池,可能会处理碎片问题。