【问题标题】:C++ simple new & delete thread and memory leaksC++ 简单的 new & delete 线程和内存泄漏
【发布时间】:2015-11-06 02:57:52
【问题描述】:

我在我的代码中使用了线程,发现一些内存泄漏,所以我测试了下面的简单代码。

#include <thread>

void foo(){}

int main()
{
    for(; ;)
    {
        std::thread *th = new std::thread(foo)
        th->join();
        delete th;
    }
}

我使用 VC++ Release 模式对其进行了测试,没有更改任何设置,而且我还发现了内存泄漏。当我使用 Windows 任务管理器检查进程时,该程序的内存正在增加。

我认为我的代码中的delete 不起作用。内存泄漏有什么原因吗?


更多细节

在我检查了 cmets 和答案后,我又运行了几分钟的程序。几分钟后,我发现测试程序不会使用更多内存。但是我不确定为什么threaddelete 之后使用更多内存(其他类不使用),并且我的程序在几分钟后仍然随着内存使用量的增加而关闭。在我的程序中,每个循环只使用了11个threads,所以内存使用量增长缓慢,突然关闭。

【问题讨论】:

  • 你到底为什么要newdelete 发帖?只需std::thread th(foo);
  • 可能没有泄漏,但任务管理器不可信。见How precise is Task Manager?
  • @D.Lucit 这不是使用 new 和 delete 的理由。
  • std::vector&lt;std::thread&gt; 可以正常工作。
  • @D.Lucit push_back也可以在vector内部移动对象,但最好使用vec.emplace_back(/*args*/);直接在vector末尾构造一个新线程。

标签: c++ multithreading memory-leaks destructor


【解决方案1】:

我认为操作系统不能这么快地管理线程的内存。 1)每隔一段时间检查相同的代码 2) 您查看 Windows 任务管理器中的哪个统计信息列?检查“分配的内存”。

【讨论】:

  • 我还在内存选项卡中检查了 Windows 资源管理器(不确定是否准确),我可以找到相同的内存使用变化。
猜你喜欢
  • 1970-01-01
  • 2012-12-07
  • 2015-08-14
  • 1970-01-01
  • 2010-11-19
  • 2012-03-04
  • 2020-08-08
  • 2021-05-08
  • 2013-12-20
相关资源
最近更新 更多