В качестве справочной страницы для pthread_create (3) говорится:
" В Linux / x86-32 размер стека по умолчанию для нового потока составляет 2 мегабайта ", если не установлено ограничение ресурса RLIMIT_STACK
(ulimit -s
): в этом случае " определяет размер стека по умолчанию для новых потоков".
Вы можете проверить этот факт, получив текущее значение RLIMIT_STACK с помощью getrlimit (2) , как в следующей программе:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>
int main()
{
/* Warning: error checking removed to keep the example small */
pthread_attr_t attr;
size_t stacksize;
struct rlimit rlim;
pthread_attr_init(&attr);
pthread_attr_getstacksize(&attr, &stacksize);
getrlimit(RLIMIT_STACK, &rlim);
/* Don't know the exact type of rlim_t, but surely it will
fit into a size_t variable. */
printf("%zd\n", (size_t) rlim.rlim_cur);
printf("%zd\n", stacksize);
pthread_attr_destroy(&attr);
return 0;
}
Это результаты при попытке запустить его (скомпилировано в a.out
) из командной строки:
$ ulimit -s
8192
$ ./a.out
8388608
8388608
$ ulimit -s unlimited
$ ./a.out
-1
2097152
$ ulimit -s 4096
$ ./a.out
4194304
4194304