int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
O stacksize
atributo deve definir o tamanho mínimo da pilha (em bytes) alocado para a pilha de threads criada.
No seu exemplo, o tamanho da pilha é definido como 8388608 bytes, o que corresponde a 8 MB, conforme retornado pelo comando ulimit -s
Portanto, que corresponde.
A partir da pthread_create()
descrição:
No Linux / x86-32 , o tamanho da pilha padrão para um novo encadeamento é 2 megabytes . Sob a implementação de encadeamento NPTL, se o
limite de recurso programável RLIMIT_STACK no momento em que o programa foi iniciado tiver algum valor diferente de "ilimitado", ele determinará o tamanho da pilha padrão dos novos encadeamentos. Usando pthread_attr_setstacksize (3), o atributo de tamanho da pilha pode ser definido explicitamente no argumento attr usado para criar um encadeamento, a fim de obter um tamanho de pilha diferente do padrão.
Portanto, o tamanho da pilha de encadeamentos pode ser definido através da função set acima ou da ulimit
propriedade do sistema. Para os 16k aos quais 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.
8388608 / 1024 = 8192
.