我每40ms调用以下void function()
函数,我发现内存消耗量稳步增加。消费起初并不明显,但几天之后,消费量很大。任何人都可以帮助解释这段代码有什么问题。这是一个线程问题还是std::move
问题,导致内存泄漏。C++程序潜在的内存泄漏
void do_task(const std::vector<int>& tmp)
{
// do some work here
}
void function()
{
std::vector<std::thread> task;
std::vector<int> tmp1, tmp2;
GetTempValue(tmp1);
GetTempValue(tmp2);
task.push_back(std::thread(do_task, std::move(tmp1)));
task.push_back(std::thread(do_task, std::move(tmp2)));
tmp1.clear();
tmp2.clear();
UpdateTempValue(tmp1);
UpdateTempValue(tmp2);
task.push_back(std::thread(do_task, std::move(tmp1)));
task.push_back(std::thread(do_task, std::move(tmp2)));
tmp1.clear();
tmp2.clear();
for(int i=0; i<task.size(); i++)
{
task[i].join();
}
}
我不假设您是通过Valgrind发送的?无论如何,如果移动语义在做他们的工作,那些清除就毫无意义。出于好奇,请用您的平台工具链信息更新您的问题,最好是[mcve](https://stackoverflow.com/help/mcve)。 – WhozCraig
@rxu。上面的代码不存在数据竞争问题。矢量tmp1和tmp2处理得相当正确。除了clear()的调用是多余的。 –
对不起,噪音:) –