首页 > 解决方案 > 创建不执行任何操作导致内存泄漏 x64 的线程

问题描述

我正在搞乱一些线程,为我将要做的一些服务器工作做准备。我正在使用一些简单的循环代码检查内存泄漏。我注意到运行一些代码会导致内存泄漏。我假设的代码是防泄漏的,因为它非常简单。所以我又试了一次,但这次没有任何代码,只是一个空函数,我仍然得到相同的结果。

#include <thread>
#include <windows.h>


void doNothing() {}

int main() {
    for (int i = 0; i < 10000; i++) {
        std::thread thread_obj(doNothing);
        thread_obj.join();
    }
    Sleep(10000000); // <- this sleep here is just so I can monitor the memory in Visual Studio 2019
    return 0;
}

这是内存使用图。它变平的点是当它进入睡眠状态时

在此处输入图像描述

进入睡眠后的堆大小

在此处输入图像描述

这是堆栈视图。在这里,我得到了一些令人费解的结果。

在此处输入图像描述

谁能解释我做错了什么?

我正在使用 x64,Visual Studio 2019 16.5.2

如果答案很明显,或者我在做一些愚蠢的事情——我提前道歉,因为这个问题看起来很重要,我 99% 确定我做错了什么。

标签: c++multithreadingvisual-studiomemorymemory-management

解决方案


推荐阅读