我每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()的調用是多餘的。 –
對不起,噪音:) –