int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
The
stacksize
attribute shall define the minimum stack size (in bytes) allocated for the created threads stack.
No seu exemplo, o tamanho da pilha é definido como 8388608 bytes, o que corresponde a 8MB, conforme retornado pelo comando ulimit -s
Então isso corresponde.
A partir da descrição de pthread_create()
:
On Linux/x86-32, the default stack size for a new thread is 2 megabytes. Under the NPTL threading implementation, if the RLIMIT_STACK soft resource limit at the time the program started has any value other than "unlimited", then it determines the default stack size of new threads. Using pthread_attr_setstacksize(3), the stack size attribute can be explicitly set in the attr argument used to create a thread, in order to obtain a stack size other than the default.
Assim, o tamanho da pilha de encadeamentos pode ser definido por meio da função set acima ou da propriedade do sistema ulimit
.
Para o 16k que você está se referindo, não está claro em qual plataforma você viu isso e / ou se algum limite de sistema foi definido para isso.
Veja a página pthread_create e aqui para alguns exemplos interessantes sobre isso.