线程退出时Windows会释放用户提供的堆栈吗?

问题描述 投票:0回答:1

根据维基百科,Win32线程信息块:存储在TIB中的堆栈信息,我应该能够通过更新

RSP
TIB
来更改线程的堆栈。

问题是,当线程退出时,我的自定义堆栈会发生什么? Windows 会使用

VirtualFree()
释放它,还是需要手动释放它?

winapi
1个回答
0
投票

根据@RbMm的建议:

ZwFreeVirtualMemory

 上的
Teb->DeallocationStack
系统调用。因此,如果
您更新此成员 - 系统将其释放。然而 - 为了什么改变
堆?您还可以将线程转换为纤维并创建额外的
纤维。在光纤堆栈上运行。可以设置自定义堆栈(需要更新字段
在 Teb 中),在其上运行,并在退出之前返回到本机堆栈。

© www.soinside.com 2019 - 2024. All rights reserved.