线程退出时Windows是否会释放自定义栈?需手动释放吗?
自定义线程栈的释放规则
Windows不会自动释放你手动分配的自定义栈,必须由你自己调用VirtualFree()完成释放操作。
原因很直接:Windows仅负责管理它为线程默认创建的栈。当你通过修改RSP寄存器和TIB替换为自定义栈时,系统并没有跟踪这个栈的分配记录,线程退出时也不会主动识别并释放这块内存。
需要注意的细节:
- 你可以选择在线程退出前(栈不再被使用时)调用
VirtualFree(),也可以在线程退出后(确认没有其他线程依赖这块内存)执行释放,避免内存泄漏。 - 释放时要和分配时的参数匹配:比如如果是用
VirtualAlloc()以MEM_COMMIT | MEM_RESERVE标记分配的栈,释放时要使用MEM_RELEASE标记。
内容的提问来源于stack exchange,提问作者user1829232
相关产品推荐
相关产品推荐

