根据维基百科,Win32线程信息块:存储在TIB中的堆栈信息,我应该能够通过更新
RSP
和TIB
来更改线程的堆栈。
问题是,当线程退出时,我的自定义堆栈会发生什么? Windows 会使用
VirtualFree()
释放它,还是需要手动释放它?
根据@RbMm的建议:
ZwFreeVirtualMemory
上的Teb->DeallocationStack
系统调用。因此,如果 您更新此成员 - 系统将其释放。然而 - 为了什么改变 堆?您还可以将线程转换为纤维并创建额外的 纤维。在光纤堆栈上运行。可以设置自定义堆栈(需要更新字段 在 Teb 中),在其上运行,并在退出之前返回到本机堆栈。