我使用 pthreads_attr_getthreadsizes() 获取一个线程的默认堆栈大小,在我的机器上为 8MB。
但是当我创建 8 个线程并为它们分配非常大的堆栈大小(比如数百 MB)时,程序崩溃了。
所以,我想,应该
("Number of threads" * "stack size per thread") < a constant value (e.g. virtual memory size)
?
最佳答案
简短的回答是"is"。
更长的答案是所有线程共享一个虚拟地址空间,因此该空间的用户空间可用部分必须足够大以包含所有线程堆栈(以及代码、静态数据、堆、库以及任何杂项映射)。
数百兆字节的堆栈是您做错事的一个很好的指示,正如他们在经典中所说的那样。
关于linux - 一个进程中线程的总堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2870836/