我使用pthreads_attr_getthreadsizes()来获取一个线程的默认堆栈大小,在我的机器上为8MB。
但是当我创建8个线程并为它们分配一个非常大的堆栈大小(比如几百MB)时,程序崩溃了。
所以,我想,
("Number of threads" * "stack size per thread") < a constant value (e.g. virtual memory size)
答案 0 :(得分:1)
简短的回答是“是”。
更长的答案是所有线程共享一个虚拟地址空间,因此该空间的用户空间可用部分必须足够大以包含所有线程堆栈(以及代码,静态数据,堆,库)和任何杂项映射。)
正如他们在经典中所说的那样,数百兆字节的堆栈表明你做错了。