每个新线程或纤程都有自己的栈空间内存占用,保留的栈内存大小表示为虚拟内存中的总分配量。最好是选择尽可能小的堆栈大小和提交所需的线程的堆栈或纤程可靠地运行。为栈保留的内存页不能用于任何其他目的。
线程退出时,栈占用的内存会被释放。但如果线程被另一个线程硬性终止,它的栈不会被释放(按Windows核心编程一书的说法,ExitThread会释放栈,而TerminateThread不会)。
线程默认栈使用的大小是1 MB。要改变最初提交堆栈空间,使用CreateThread, CreateRemoteThread,或CreateFiber 函数的dwStackSize参数。要改变预留堆栈大小,设置dwCreationFlags参数为STACK_SIZE_PARAM_IS_A_RESERVATION并设置dwStackSize参数。对于纤程,使用CreateFiberEx的dwStackReserveSize参数。