std::vector 不在线程中释放内存

std::vector does not release memory in a thread

如果我使用 _beginthreadex 创建一个线程,并且在我使用 std::vector<WCHAR> 的线程中消耗 200MB 内存 - 当线程结束时,内存不会被释放。即使在CloseHandle之后,内存也没有释放。

这是一个工作示例:

#include <windows.h>
#include <process.h>
#include <vector>
using namespace std;

unsigned __stdcall   Thread_RestartComputer(void* pComputerName)
{
    std::vector<WCHAR> asdf(100000000);
    _endthreadex(0);
    return 0;
}
int main()
{
    UINT threadID = 0;
    HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_RestartComputer, 0, CREATE_SUSPENDED, &threadID);
    ResumeThread(hThread);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
}

我以为std::vector<WCHAR>在超出范围时释放了内存?

C++ 不知道调用 _endthreadex 会使线程消失。所以它不会在调用 _endthreadex.

之前调用 asdf 等局部变量的析构函数

解决方案:不要那样做。 return 0; 结束线程并调用析构函数。

如您在 documentation for _endthreadex 中所见,_endthreadex 导致未调用线程中挂起的 C++ 析构函数。

所以只需删除对 _endthreadex 的调用,您应该没问题。

这种行为的原因在 中有解释。