TerminateThread 后清理?
Cleanup after TerminateThread?
如何释放调用 TerminateThread
后剩余的虚拟内存?可以通过 VirtualFree
完成吗?当然如何。 TerminateThread
.
的"Dangers"完全理解
在非托管进程中,没有从外部整理内存的现实方法。
可以通过多种不同方式分配内存。最终,一切都从调用 VirtualAlloc
、VirtualAllocEx
等开始。但在实践中,运行时库总是使用子分配堆管理器。这些堆分配器将通过调用 VirtualAlloc
获取内存,但随后会分发子块。堆管理器通常在进程中的线程之间共享。所以你无法从外部知道如何释放这些子块。
即使我们没有子分配器,你怎么知道 VirtualAlloc
分发的哪些块你可以销毁?一个线程可以通过调用 VirtualAlloc
来分配内存,并要求内存在分配线程中存在并被另一个线程销毁。
但是,如果您乐于放弃所有这些,并且只想销毁堆栈(根据您的意见),那么本文将向您展示如何使用 RtlFreeUserThreadStack
进行销毁:http://www.nicklowe.org/2012/01/thread-termination-dont-leak-the-stack/
如何释放调用 TerminateThread
后剩余的虚拟内存?可以通过 VirtualFree
完成吗?当然如何。 TerminateThread
.
在非托管进程中,没有从外部整理内存的现实方法。
可以通过多种不同方式分配内存。最终,一切都从调用 VirtualAlloc
、VirtualAllocEx
等开始。但在实践中,运行时库总是使用子分配堆管理器。这些堆分配器将通过调用 VirtualAlloc
获取内存,但随后会分发子块。堆管理器通常在进程中的线程之间共享。所以你无法从外部知道如何释放这些子块。
即使我们没有子分配器,你怎么知道 VirtualAlloc
分发的哪些块你可以销毁?一个线程可以通过调用 VirtualAlloc
来分配内存,并要求内存在分配线程中存在并被另一个线程销毁。
但是,如果您乐于放弃所有这些,并且只想销毁堆栈(根据您的意见),那么本文将向您展示如何使用 RtlFreeUserThreadStack
进行销毁:http://www.nicklowe.org/2012/01/thread-termination-dont-leak-the-stack/