ThreadPool
ThreadPool copied to clipboard
A problem about memory leak
I write code like this:
struct thv
{
long l[1024];
};
void thcall(vector<thv> l)
{
usleep(10 * 1000);
}
int main(int, char **)
{
ThreadPool thpool(12);
vector<thv> v;
vector<future<void>> res;
for (int i = 0; i < 1000; i++)
{
v.push_back(thv());
}
for (int i = 0; i < 1000; i++)
{
res.push_back(thpool.enqueue(thcall, v));
usleep(10 * 1000);
}
for (auto &it : res)
{
it.get();
}
vector<thv>().swap(v);
cout << v.capacity() << endl;
cout << "----------end----------" << endl;
std::getchar();
}
when terminal printf
0 ----------end----------
I notice this demo used about 8G memory.
I run this code in ubuntu using ARM cpu and compiled with gcc 9.4.0. what coused this problem? It had serious impacts on my program.
Thanks very much
std::future<return_type> res = task->get_future(); // will malloc memory to store function return val;
Can I work on this if no one is working? Thanks!
void thcall(vector<thv> l)
Every time when you call thecall
will copy a v
.
void thcall(vector<thv>& l)
Use reference instead could help.