Общий размер стека потоков в одном процессе - PullRequest
0 голосов
/ 20 мая 2010

Я использую pthreads_attr_getthreadsizes (), чтобы получить размер стека по умолчанию для одного потока, 8 МБ на моей машине.

Но когда я создаю 8 потоков и выделяю им очень большой размер стека, скажем, сотни МБ, происходит сбой программы.

Итак, я думаю,

("Number of threads" * "stack size per thread") < a constant value (e.g. virtual memory size)

1 Ответ

1 голос
/ 20 мая 2010

Короткий ответ: «Да».

Более длинный ответ заключается в том, что все ваши потоки совместно используют одно виртуальное адресное пространство, и поэтому используемая пользователем часть этого пространства должна быть достаточно большой, чтобы содержать все стеки потоков (а также код, статические данные, кучи, библиотеки и любые другие сопоставления).

Многотомегабайтные стеки являются хорошим показателем того, что вы делаете неправильно, как говорят классики.

...