TerminateThread后清理?

时间:2015-01-09 13:33:57

标签: c++ winapi

如何释放调用TerminateThread后遗留的虚拟内存?可以通过VirtualFree来完成,当然也可以。我完全理解TerminateThread“危险”

1 个答案:

答案 0 :(得分:4)

在一个不受管理的过程中,没有现实的方法可以从外部整理内存。

可以通过多种不同方式分配内存。最终,它始于对VirtualAllocVirtualAllocEx等的调用。但实际上,运行时库总是使用子分配堆管理器。这些堆分配器将通过调用VirtualAlloc来获取内存,但随后会分发子块。并且堆管理器通常在进程中的线程之间共享。所以你无法从外面知道如何释放这些子块。

即使我们没有子分配器,你怎么能知道VirtualAlloc你允许销毁哪些块?线程可以通过调用VirtualAlloc来分配内存,并要求内存超出分配线程并被另一个线程销毁。

但是,如果您乐意让所有这些内容消失,并希望销毁堆栈(根据您的意见),那么本文将向您展示如何使用RtlFreeUserThreadStack:{{3} }