【发布时间】:2017-08-13 03:15:53
【问题描述】:
我每 40 毫秒调用一次以下void function() 函数,我发现内存消耗稳步增加。一开始消耗不明显,但几天后消耗巨大。任何人都可以帮助解释这段代码有什么问题。是线程问题还是std::move问题导致了内存泄漏。
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。
-
@rxu。上面的代码不能存在数据竞争问题。向量 tmp1 和 tmp2 处理得非常正确。除了对 clear() 的调用是多余的。
-
抱歉打扰了:)
-
我会更仔细地研究 do_task()。这里使用的操作系统和编译器是什么?
-
等一下!!! do_task 不应该接收 std::vector,而不是引用吗?
标签: c++ multithreading memory-leaks std