根据之前的回答,每个线程的基本开销为1MB。我不会深入探讨各种细微差别 - 其他回答已经涵盖了它们。对于Microsoft Visual C/C++线程,您还需要考虑每个线程的C运行时工作区的开销,该工作区根据需要分配(并使用Thread Local Storage TlsAlloc()存储),以执行诸如sprintf()、scanf()、strtol()等操作。我没有确切的数据 - 您需要扫描Microsoft CRT的源代码来计算它。对于其他C/C++运行时(gcc/g++/borland/digital mars),可能会或可能不会存在类似的每个线程数据,这是实现细节。我们都不知道.Net Execution Engine的内部情况,但那里可能也存储着一些每个线程的数据。不过要弄清楚这个开销可能有些困难。
CreateThread
调用中提交少于保留的数量。您也可以通过这种方式覆盖特定线程的默认保留。我也不同意您的“几乎肯定是错误”的结论。 - Adrian McCarthy