在Windows内部本书第5版有360页以下评论.
The stack size for the initial thread is taken from the image—there’s no way to specify another size.
据我所知,对于Windows操作系统,每个线程都有4K或16K(取决于系统)堆栈,并且大小是固定的.
那么.NET中的堆栈怎么样?
是的,启动线程的大小由.EXE文件头中的值确定.必然如此,在程序中的任何代码运行之前,操作系统都会创建线程.它调用程序的入口点CorExeMain().
您使用的托管编译器将该值写入EXE文件头.当您针对x86或任何CPU时,当前.NET编译器选择1 MB,当您定位x64时,选择4 MB.但是,这不是固定的,您可以使用Editbin.exe实用程序/ STACK命令行选项修改该值.您可以使用此post-build事件来获得2MB堆栈:
set path=%path%;$(DevEnvDir);$(DevEnvDir)..\..\vc\bin
editbin.exe /STACK:2097152 "$(TargetPath)"
Run Code Online (Sandbox Code Playgroud)
您自己创建的线程的堆栈大小在您的控制之下,Thread类构造函数具有允许您指定大小的重载.如果将值剪切为256 KB,则不能使其太小.这是必要的,即时编译器也使用堆栈.